Linux C selec
来源:互联网 发布:手机炒股软件排名 编辑:程序博客网 时间:2024/05/01 07:16
Linux C select 小结:
忘记select怎么用了 今天回忆了一下!
新手 一起学习!.
select原型
int select(int maxnfds, fd_set *readfds, fd_set *writefds,fd_set*exceptfds, struct timeval *timeout);
select 函数参数
maxnfds 最大的文件描述符的值再加1
fd_set *readfds 在这个集合里 检查fd_set文件描述符是否可读
fd_set *writefds 在这个集合里 检查fd_set文件描述符是否可写
fd_set*exceptfds在这个集合里 检查fd_set文件描述符是否有异常
struct timeval *timeout 在这个集合里 等待的时间 设置NULL的话 一直等待(阻塞状态)
把时间设置问0秒0`毫秒,就是一个 纯粹的非阻塞函数,不管文件描述符是否变化,都立刻返回执行,无变化返回0
把时间设置大于0,这就是等待的超时时间
struct timeval tv;
tv.ev_sec = 1;
tv.tv_usec =500000
select举例:
在ubuntu14.04下测试
#include<sys/types.h>#include<sys/time.h>#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<sys/ioctl.h>#include<sys/select.h>int main(){ int fd_mice = open("/dev/input/mice", O_RDONLY); int fd_keyb = open("/dev/input/event1", O_RDONLY); int readlen; char buf[1024]; while(1) { // sigset_t // 集合 fd_set set; FD_ZERO(&set); //清空集合 FD_SET(fd_mice, &set); FD_SET(fd_keyb, &set); int nfds = fd_keyb + 1; struct timeval tv; tv.tv_sec = 2; tv.tv_usec = 0; // select是阻塞的函数,它的执行条件是,集合中有文件描述符有事件 // 或者超时 int ret = select(nfds, &set, NULL, NULL, &tv); // 返回值代表了select返回的有事件的文件描述符个数 if(ret == 0) { printf("鼠标和键盘都没有动\n"); } if(FD_ISSET(fd_mice, &set)) { readlen = read(fd_mice, buf, sizeof(buf)); printf("鼠标动了, readlen=%d\n", readlen); } if(FD_ISSET(fd_keyb, &set)) { readlen = read(fd_keyb, buf, sizeof(buf)); printf("键盘动了, readlen=%d\n", readlen); } }}
结果如下:
0 0
- Linux C selec
- linux 下阻塞睡眠等待selec函数简单实现
- Selec函数
- PHP MySQL Selec
- 获取selec选中的值
- load data and selec into 记录
- 用数组给selec元素插入选项
- jQuery对Selec,radio,checkbox的相关操作
- selec/poll中的读写事件和epoll中的读写事件
- mysql中selec sum返回null的解决方法
- linux & C
- linux c
- linux c
- linux C
- linux c
- linux c
- linux-c
- Linux C
- 闰秒及其对计算机系统影响
- Hibernate:cannot simultaneously fetch multiple bags 解决方案
- 空指针异常的解决思路
- cnet6.5 32bit 安装spark
- iOS你该掌握什么?
- Linux C selec
- 不使用循环,判断一个数是否是2的N次方
- Java中的“抽象接口”
- hadoop(2.x)以hadoop2.2为例完全分布式最新高可靠安装文档
- C wait()和waitpid()
- 时间介词
- JSP内置对象(二)
- spring boot cloud热部署插件简单配置
- leetcode-- Ugly Number