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。

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值