[systemd-devel] libudev: subdirectories in sysfs (what does "available" mean?)

David Herrmann dh.herrmann at gmail.com
Tue Nov 24 01:43:24 PST 2015


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").


More information about the systemd-devel mailing list