首页 > 其他分享 >07 poll

07 poll

时间:2023-03-05 18:00:34浏览次数:42  
标签:struct int wait nfds POLLOUT poll 07

第4课.poll机制
代码

1 poll工作机制

poll允许进程对一个或多个文件做非阻塞的读取或者写入。

引用百问网的图片

需要注意的是步骤四与五,应用程序调用poll函数在文件系统层sys_poll调用驱动的poll接口:将线程挂入wait队列,并返回poll的事件类型。

sys_poll会根据事件的类型去觉得是否休眠,如果休眠时间到了就会返回应用态timeout

因为在sysfs层会循环去调用drv的poll所以我们不能每次调用就将同一个线程挂入wait_queue。此时就需要使用poll_wait

2 poll函数及数据结构

2.1 poll

int poll(struct pollfd *fds, nfds_t nfds, int timeout);
fds	: 文件描述符
nfds: poll文件个数
return value : 为符合条件的文件
struct pollfd{
	int fd;			//文件描述符
	short events;	//等待的事件
	short revents;	//实际发生的事件
};

2.2 poll_wait

static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)

poll_wait将等待队列wait_address注册到poll_table中等待调度器进行调度

2.3 事件类型

POLLIN        :如果设备可以无阻塞的读取,就设置改位
POLLRDNORM    :如果“通常”的数据已经就绪,可以读取,就设置该位。一个可读设备返回(POLLIN | POLLRDNORM)
POLLOUT       :如果设备可以无阻塞的写入,就在返回值中设置该位
POLLWRNORM    :该位和POLLOUT的意义一样,有时其实就是同一个数字。一个可写的设备将返回(POLLOUT | POLLWRNORM)

标签:struct,int,wait,nfds,POLLOUT,poll,07
From: https://www.cnblogs.com/burnk/p/17181161.html

相关文章

  • ora-2075
    手工回滚2pc事务如下报错ORA-02075:anotherinstancechangedstateoftransaction导致ORA-02075的原因是另一个实例中的会话发出了提交强制或回滚强制,并且它正在执......
  • unity3D设置手枪的动画与子弹的自动销毁07
    取消手枪自动播放动画usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassGunManager:MonoBehaviour{//1.枪旋转......
  • 07:swift-闭包
    复习 正文/*7:闭包1:**闭包能够捕获和存储定义在其上下文中的任何常量和变量的引用,这也就是所谓的闭合并包裹那些常量和变量,因此被称为“闭包”.Swif......
  • HDOJ 2061-2070
    2061Treasurethenewstart,freshmen!ProblemDescriptionbackground:Anewsemestercomes,andtheHDUalsomeetsits50thbirthday.Nomatterwhat'syou......
  • 题解 P3455 [POI2007]ZAP-Queries
    题目link是莫比乌斯函数还是莫比乌斯反演捏?感觉好多所谓“莫比乌斯反演”题只要拿\(\mu\)性质给暴力替换一下就能做出来了,比如这题qwq答案是这个式子:\(\sum\limits_{......
  • SQLSTATE[22007]:无效的日期时间格式:1366不正确的整数值:
    前言这几天在爬取html时出现了这个问题才发现有emoj表情存在,这个之前在做小程序时遇到过,许多微信名称都会有emoj的存在,所以微信授权都拿不到。查看错误代码之后发现是同样......
  • 路飞项目day_07
    目录今日内容详细一、为开源项目贡献代码二、pycharm使用git三、登录注册功能分析四、手机号是否存在视图函数模板五、多方式登录接口1.视图类2.序列化类六、腾讯云短信申......
  • apoll4 读取ldm6dsrtr
    6轴传感器数据读取,通过spiST官网下载传感器对应的C语言扩增库lsm6dsr_STdC中间还把型号搞错了浪费了些时间下载好之后只要修改两个接口即可platform_read,platform_w......
  • 路飞项目---day07()
    昨日回顾#GIt内容大回顾#1版本管理软件:git,svn -代码合并-代码版本管理-协同开发,合并代码#2git跟svn区别#3git安装:相应平台软件,下载完成,一路下......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节
    24.两两交换链表中的节点-力扣(LeetCode)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交......