select系统调用的使用

select系统调用与驱动程序当中的poll相对应.它可能会阻塞进程。select系统调用由驱动的poll方法实现。

1.select需要函的头文件:

    #include <sys/select.h>

2.select函数源型:

    int select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout);

    maxfd - 文件描述符的范围,比待检测的最大文件描述符大1

    readfds - 被读监控的文件描述符集

    writefds - 被写监控的文件描述符集

    exceptfds - 被异常监控的文件描述符集

    timeout - 监控的超时时间。到时间后不再监控。函数返回

    返回值 - a.正常返回时,返回值为满足条件的文件描述符的个数

                    b.经过timeout等待后仍然无文件满足要求,返回0

                    c.如果select被某个信号中断,返回-1,并设置errno为EINTR

                    d.如果出错,返回-1,并设置errno为相应的值

3.select相关的宏定义:

    void FD_SET(int fd, fd_set *fdset); // 将文件描述符fd添加到文件描述符集合fdset中

    void FD_CLR(int fd, fd_set *fdset); // 从文件描述符集合fdset中清除文件描述符fd

    void FD_ZERO(fd_set *fdset); // 清空文件描述符集合fdset

    void FD_ISSET(int fd, fd_set *fdset); // 调用select后,测试是否fd满足监控条件

4.poll方法原型:

    unsigned int (*poll)(struct file *filp, poll_table *wait); 

5.poll设备方法的作用:

    a.使用poll_wait函数将等待队列添加到poll_table中

    b.返回描述设备是否可读或可写的掩码

    c.掩码:

                      POLLIN - 设备可读

                      POLLRDNORM - 数据可读

                      POLLOUT - 设备可写

                      POLLWRNORM - 数据可写

      设备可读通常返回( POLLIN | POLLRDNORM )

      设备可写通常返回( POLLOUT | POLLWRNORM )

      驱动中的poll方法并不会导致进程阻塞,它只是负责登记等待队列。阻塞发生在select()函数中的do_select()函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值