当前位置:  技术问答>linux和unix

poll函数问题

    来源: 互联网  发布时间:2016-05-05

    本文导语:  static int poll_one(struct file *file) { int retval = 1; poll_table *table; struct poll_wqueues pwq; poll_initwait(&pwq); table = &pwq.pt; for (;;) { int mask; set_current_state(TASK_INTERRUPTIBLE);----------设置当前进程状态为可以被信号中断。...

static int poll_one(struct file *file)
{
int retval = 1;
poll_table *table;
struct poll_wqueues pwq;

poll_initwait(&pwq);
table = &pwq.pt;
for (;;) {
int mask;
set_current_state(TASK_INTERRUPTIBLE);----------设置当前进程状态为可以被信号中断。
mask = file->f_op->poll(file, table);--------调用poll函数把当前进程挂起到poll的链表。
if (mask & POLLIN)--------检查是否设备可被不阻塞地读,但是为什么可以的话就break ? break;
table = NULL;
if (signal_pending(current)) {-----signal pending是什么意思,做什么,很晕,高人解释下
retval = -ERESTARTSYS;
break;
}
schedule();---------挂起后,执行调度,但是这个for循环何时跳出呢,是在上面的break处吗?还是在别的函数中有break? }
set_current_state(TASK_RUNNING);
poll_freewait(&pwq);
return retval;
}


我上面的解释是否正确,以及一些问题,大家帮忙了。这个函数看着有点晕,对poll这边不是很了解,大家帮忙。谢谢了。

|
mask = file->f_op->poll(file, table);--------调用poll函数把当前进程挂起到poll的链表。
1 这个应该是去取设备的mask值 
if (mask & POLLIN)--------检查是否设备可被不阻塞地读,但是为什么可以的话就break ? 
2 如果设备已经可以不阻塞地读的话,就应该立刻返回,不然应该执行schedule()切换出去
break; 
table = NULL; 
if (signal_pending(current)) {-----signal pending是什么意思,做什么,很晕,高人解释下 
3 当前进程有信号需要处理,中断等待,处理信号,同时返回一个错误码
retval = -ERESTARTSYS; 
break; 

schedule();---------挂起后,执行调度,但是这个for循环何时跳出呢,是在上面的break处吗?还是在别的函数中有break? 
4 for循环何时跳出?出现2或3的时候


|
晕,你的设备可用了,当然要返回给其他code使用, 其他code还等着用这个设备。你都可用了,还赖在这里干什么?
signal_pending很简单,就是检查一个标志,自己去看这个函数

|
linux 群 8709932  欢迎大家的加入

|
如果返回的是0,代表什么含义?请赐教呀

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util类linkedlist<e>的类成员方法: poll定义及介绍
  • 哪位能详细介绍一下poll的用法,感觉man poll说得不够清晰
  • java命名空间java.util接口queue<e>的类成员方法: poll定义及介绍
  • 应用层获得SIGIO信号如何区分是kill_fasync(poll_in)或kill_fasync(poll_out)产生的
  • java命名空间java.util类priorityqueue<e>的类成员方法: poll定义及介绍
  • tuxedo客户端调用的tpacall返回的fd是否支持poll?
  • java命名空间java.util类arraydeque<e>的类成员方法: poll定义及介绍
  • poll_wait无法阻塞是什么原因造成的?
  • java命名空间java.util.concurrent类priorityblockingqueue<e>的类成员方法: poll定义及介绍
  • 怎么用poll检查设备是否有数据?还有fsync怎么用?
  • java命名空间java.util.concurrent类concurrentlinkedqueue<e>的类成员方法: poll定义及介绍
  • Ajax投票程序 Ajax Poll
  • java命名空间java.util接口deque<e>的类成员方法: poll定义及介绍
  • poll为什么不返回?
  • java命名空间java.util.concurrent接口blockingdeque<e>的类成员方法: poll定义及介绍
  • 中断和polling的区别?
  • java命名空间java.util.concurrent接口completionservice<v>的类成员方法: poll定义及介绍
  • @@请教poll模式和select中的FD_SETSIZE
  • java命名空间java.util.concurrent类synchronousqueue<e>的类成员方法: poll定义及介绍
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • java命名空间java.util.concurrent类delayqueue<eextendsdelayed>的类成员方法: poll定义及介绍
  • poll后,如何判断某个文件描述符可用?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3