Chinaunix首页 | 论坛 | 博客
  • 博客访问: 218908
  • 博文数量: 39
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 584
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-18 20:24
个人简介

学习总结,分享快乐。 望指正错误, 共同提高!!!

文章分类

全部博文(39)

分类: 嵌入式

2015-06-11 08:15:15

0> 目标:
                会用,忽略原理,,,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1> 用户态: #include
poll:把线性的阻塞,变成并行的阻塞,防止了1个被阻塞,全都阻塞状况。
read1()

read2()

read3()

read1()      read2()       read3()


 struct pollfd {
               int   fd;         /* 文件描述符*/
               short events;     /* 对该文件描述符要监听的事件类型 , 例如POLLIN是对该fd读的阻塞*/
               short revents;    /* 该文件描述符发生的事件,由内核poll函数返回值填充*/
 };

int poll (
                        struct pollfd *fds,   //要监听多个文件描述符,需要结构体数组->数组名。
                        nfds_t nfds,           //文件描述符个数
                         int timeout           // [>0等待的毫秒]    [<0无限超时] [=0指示poll调用立即返回并列出准备好I/O的文件描述符]
);

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用框架:
     app.txt


xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2> 内核态:
/*用户态poll select epoll都调的是这个函数。*/

unsigned int poll(struct file *filp,  struct_table_struct * wait)   //思路:我们用等待队列实现了阻塞, 那么把每个等待队列放一排,就实现了整体监听
{
    void poll_wait(struct file * filp,
                                wait_queue_head_t * wait_address,   //等待队列地址
                                poll_table *p   //wait: 等待队列放到此
        );          //用户态调用poll, 就阻塞到这。

    if(用户态监听事件发生){
            return make;  //返回监听对应事件编码;
    }

}

poll.txt









阅读(1931) | 评论(0) | 转发(0) |
0

上一篇:设备操作函数 2> ioctl

下一篇:编译错误

给主人留下些什么吧!~~