sysfs_notify()

void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);

void sysfs_notify_dirent(struct sysfs_dirent *sd);

sysfs_notify()和sysfs_notify_dirent()都是用来唤醒在读写属性文件(sysfs节点)时因调用select()或poll()而阻塞的用户进程。如:

用户空间代码如下:

int main()

{

   int hw_fd;

   int err;

   struct pollfd pfd;

   int value = 0;

   hw_fd = open("/sys/devices/platform/hw_ps/install", O_RDONLY);//sysfs节点

   if (hw_fd < 0)

          return -EFAULT;

   pfd.fd = hw_fd;

   while (1) {

        pfd.revents = 0;

        err = poll(&pfd, 1, -1);  //用户进程调用poll操作时会睡眠,等待内核空间代码调用sysfs_notify()唤醒

        if (err) {

                err = read(hw_fd, &value, 1);

                if(err < 0)

                       return -ERR;

                if(value != 0)

                       break;     

           }

   }

   close(hw_fd);

}

内核空间代码在某处调用sysfs_notify()用来唤醒用户进程:

sysfs_notify(&(pedv->dev.kobj), NULL, "install");

sysfs_notify()第一个参数是内核调用sysfs_create_group/sysfs_create_file创建sysfs节点时的struct kobject对象;

第三个参数是节点的名字;

第二个参数暂时未知,常用NULL。

 

 

 

 

 

 

你可能感兴趣的:(Linux内核)