系统调用 非阻塞处理 --- select函数
来源:互联网 发布:java经典编程300例 编辑:程序博客网 时间:2024/06/01 12:43
select函数
功能:针对于socket,pipe管道文件等特殊文件的非阻塞处理方式;
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
nfds:打开文件描述符中最大的加1;
readfds:读文件描述符集合;
writefds:写文件描述符集合;
exceptfds:异常文件描述符集合;
可以使用已下函数来建立文件描述符和各个集合之间的关系
FD_CLR(int fd,fd_set* set);解除该文件描述符和集合之间的关系;
FD_SET(int fd,fd_set*set); 添加文件描述符到指定的集合中;
FD_ISSET(int fd,fd_set *set);判断该文件是否可操作;
FD_ZERO(fd_set *set);将该集合清空;
timeout:超时时间设置;
struct timeval{ long sec ; long usec};
sec:秒usec:毫秒
NULL:完全阻塞情况,相当于阻塞状态;
固定的struct timeval tv;将会将超时时间设置为sec 秒 usec毫秒;
在时间超时之前,如果select函数中指定的文件描述符集合中出现可以读,写的文件时,将会自动执行下面的程序,并返回一个大于0的值;
如果时间超过了设定的值,还是没有文件描述符的状态进行改变,将会返回一个0;并程序继续执行;
如果程序出现的错误,将会自动返回一个小于0的值;
例如:
int fd = open("pipe",O_RDONLY|O_NONBLOCK);//如果不设置无阻塞模式,Select将阻塞;
fd_set readfds ;
fd_set writefds;
fd_set exceptfds;
struct timeval tv = {10,0};//sec = 10 , usec = 0;
int ret = select(fd + 1, &readfds,&writefds,&execptfds,&tv);
if(ret > 0){
printf("有文件可操作\n");
}
else if(ret == 0){
printf("没有文件可以操作\n");
}
else{
perror("select error\n");
return -1;
}
- 系统调用 非阻塞处理 --- select函数
- 阻塞和非阻塞系统调用
- 阻塞和非阻塞系统调用
- I/O非阻塞函数实践:select
- (三)TCP用select函数处理多个客户端连接(非阻塞模式)
- linux select函数用法 && 阻塞与非阻塞IO
- linux select函数用法 && 阻塞与非阻塞IO
- IO阻塞非阻塞. select
- IO阻塞非阻塞. select
- 阻塞 非阻塞 select epoll
- select 模式 非阻塞
- 非阻塞IO--Select
- linux设备驱动--非阻塞IO与select,poll调用
- 非阻塞的connect函数和select函数
- 非阻塞的connect函数和select函数
- 阻塞、非阻塞的概念和select函数的阻塞功能
- 阻塞、非阻塞的概念和select函数的阻塞功能
- 阻塞、非阻塞的概念和select函数的阻塞功能
- Python::SocketServer
- CAESAR II 2014 v7.00 WinXP_7-ISO 1DVD管道设计应力分析软件
- JSTL常用标签实践
- nginx之main函数的解读(六)
- 阿里巴巴面试
- 系统调用 非阻塞处理 --- select函数
- My SQL 创建数据库
- 统计输入字符串的个数
- 队列的链式存储方式的实现(Java语言描述)
- nodejs>>assert
- 23个设计模式总结(1)——高手与菜鸟的区别
- VS2008常用快捷键
- 虚拟机下ubuntu共享方式上网(有线网和无线网)
- 关于百度seo作弊,你中了吗?