Once you have created a notification group and associated file descriptors with it, you can use this group to learn about changes to any of the objects associated with it.
Whenever data is available for reading on any of the group's file descriptors, reads to the notification object's file descriptor return the string passed in the ?notify=group:value pathname option.
For example, with PPS mounted at /pps, you could write something like the following:
char noid[16], buf[128]; int notify_fd, fd1, fd2; notify_fd = open("/pps/.notify", O_RDONLY); read(notify_fd, &noid[0], sizeof(noid)); sprintf(buf, "/pps/fish?notify=%s:water", noid); fd1 = open(buf, O_RDONLY); sprintf(buf, "/pps/dir/birds?notify=%s:air", noid); fd2 = open(buf, O_RDONLY); while(read(notify_fd, &buf, sizeof(buf) > 0) { printf("Notify %s\n", buf); }
The data printed from the while loop in the example above would look something like the following:
Notify 243:water Notify 243:water Notify 243:air Notify 243:water Notify 243:air
If a file descriptor for an object that is part of a notification group is closed, the string passed with the change notification is prefixed by a minus (-) sign. For example:
-243:air