[systemd-devel] libudev: subdirectories in sysfs (what does "available" mean?)
amulhern at redhat.com
Tue Nov 24 06:54:06 PST 2015
----- Original Message -----
> From: "David Herrmann" <dh.herrmann at gmail.com>
> To: "Anne Mulhern" <amulhern at redhat.com>
> Cc: "systemd" <systemd-devel at lists.freedesktop.org>
> Sent: Tuesday, November 24, 2015 4:43:24 AM
> Subject: Re: [systemd-devel] libudev: subdirectories in sysfs (what does "available" mean?)
> On Tue, Nov 17, 2015 at 11:57 PM, Anne Mulhern <amulhern at redhat.com> wrote:
> >> From: "David Herrmann" <dh.herrmann at gmail.com>
> >> On Mon, Nov 16, 2015 at 5:35 PM, Anne Mulhern <amulhern at redhat.com> wrote:
> >> > libudev has some cooperating procedures that return the keys for a bunch
> >> > of
> >> > sysfs attributes for a given device.
> >> >
> >> > These attributes all correspond to files that are stored in the sysfs
> >> > device directory.
> >> >
> >> > In the same directory there are sometimes subdirectories, that
> >> > themselves
> >> > contain files
> >> > with information about their corresponding attribute. The dm directory
> >> > is
> >> > one obvious
> >> > example.
> >> >
> >> > Are their any plans for libudev to add an ability to get the values from
> >> > these subdirectories
> >> > as some kind of attributes?
> >> >
> >> > If no, why?
> >> sd_device_get_sysattr_value(device, "foo/bar/baz", &value);
> >> This should work fine (or its udev_device_* equivalent).
> >> Btw., I recommend just using readdir(), open(), read(), and write().
> >> sysfs is a filesystem, no reason to wrap all those commands.
> > Thanks, I'm asking this more as the pyudev maintainer than as someone
> > who actually wants these values.
> > The funny thing is, I recently found out that the list obtained by
> > udev_device_get_sysattr_list_entry () and friends contains so
> > called "available" keys, but when those get passed to
> > udev_device_get_sysattr_value () the result might be NULL.
> > That makes sense in the sense that they might represent files
> > that are unreadable.
> > Now I find out that I can make up keys not in the results of
> > udev_device_get_sysattr_list_entry () and pass those to
> > udev_device_get_sysattr_value() and get a non-null result.
> > So, what does "available" mean? Do these sysattr_list_entry()
> > methods give any useful information?
> "available" probably means attributes which are direct descendants of
> the device. That is, sysattr_list_entry() only lists such direct
> descendants, while sysattr_value() allows you to query anything (you
> probably can even pass "foo/../../bar/baz").
I think it's yet more complicated than that. For example,
'dm' (for device mapper) is not in the list of available
attributes, but 'dm/name' is certainly an attribute that
can be read by sysattr_value().
More information about the systemd-devel