当前位置:首页 >> IT/计算机 >>

linux select 函数用法


linux select 函数用法
表头文件 #include<sys/time.h> #include<sys/types.h> #include<unistd.h> 定义函数 int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct

timeval * timeout); 函数说明 select()用来等待文件描述词状态的改变。参数 n 代表最大的文件描述词加 1,参数 readfds、writefds 和 exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。 底下的宏提供了处理这三种描述词组的方式: FD_CLR(inr fd,fd_set* set);用来清除描述词组 set 中相关 fd 的位 FD_ISSET(int fd,fd_set *set);用来测试描述词组 set 中相关 fd 的位是否为真 FD_SET(int fd,fd_set*set);用来设置描述词组 set 中相关 fd 的位 FD_ZERO(fd_set *set);用来清除描述词组 set 的全部位 参数 timeout 为结构 timeval,用来设置 select()的等待时间,其结构定义如下 struct timeval { time_t tv_sec; time_t tv_usec; }; 返回值 如果参数 timeout 设为 NULL 则表示 select()没有 timeout。 错误代码 执行成功则返回文件描述词状态已改变的个数, 如果返回 0 代表在描述词状态改变前已 超过 timeout 时间, 当有错误发生时则返回-1, 错误原因存于 errno, 此时参数 readfds, writefds, exceptfds 和 timeout 的值变成不可预测。 EBADF 文件描述词为无效的或该文件已关闭 EINTR 此调用被信号所中断 EINVAL 参数 n 为负值。 ENOMEM 核心内存不足 范例 常见的程序片段:fs_set readset; FD_ZERO(&readset); FD_SET(fd,&readset); select(fd+1,&readset,NULL,NULL,NULL); if(FD_ISSET(fd,readset){……} 下面是 linux 环境下 select 的一个简单用法 #include <sys/time.h> #include <stdio.h>

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <assert.h> int main() { int keyboard; int ret, i; char c; fd_set readfd; struct timeval timeout; keyboard = open("/dev/tty", O_RDONLY | O_NONBLOCK); assert(keyboard > 0); while (1) { timeout.tv_sec = 1; timeout.tv_usec = 0; FD_ZERO(&readfd); FD_SET(keyboard, &readfd); ret = select(keyboard + 1, &readfd, NULL, NULL, &timeout); if (FD_ISSET(keyboard, &readfd)) { i = read(keyboard, &c, 1); if ('\n' == c) continue; printf("hehethe input is %c\n", c); if ('q' == c) break; } } } 用来循环读取键盘输入 2007 年 9 月 17 日,将例子程序作一修改,加上了 time out,并且考虑了 select 得所有的情况: #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <assert.h> struct timeval {

long tv_sec; long tv_usec; };

/* /*

seconds */ and microseconds

*/

int main() { int keyboard; int ret, i; char c; fd_set readfd; struct timeval timeout; keyboard = open("/dev/tty", O_RDONLY | O_NONBLOCK); assert(keyboard > 0); while (1) { timeout.tv_sec = 5; timeout.tv_usec = 0; FD_ZERO(&readfd); FD_SET(keyboard, &readfd); ret = select(keyboard + 1, &readfd, NULL, NULL, &timeout); //select error when ret = -1 if (ret == -1) perror("select error"); //data coming when ret>0 else if (ret) { if (FD_ISSET(keyboard, &readfd)) { i = read(keyboard, &c, 1); if ('\n' == c) continue; printf("hehethe input is %c\n", c); if ('q' == c) break; } } //time out when ret = 0 else if (ret == 0) printf("time out\n"); } }


相关文章:
linux Select函数用法详解
因此我们推 荐使用 select。 socket select()用法 用法头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int select(...
Linux socket select 函数用法详解
Linux socket select 函数用法详解_计算机软件及应用_IT/计算机_专业资料。LINUX socket select 详解linux 的 socket 函数分为阻塞和非阻塞两种方式,比如 accept 函数...
linux 中select函数分析
linuxselect函数的使用 7页 免费 select函数 7页 免费 Linux网络编程超级详细笔记... 43页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见...
C++网络编程Select函数用法详解
linux c 中 select(I/O 多工机制) 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int select(int n,fd_...
linux select 语句
linux select 语句_信息与通信_工程科技_专业资料。结构介绍@的用法( linux select用法(转) select()函数主要是建立在 fd_set 类型的基础上的。fd_set(它 ...
select函数
linuxselect函数 8页 1下载券 Select函数实现原理分析 6页 1下载券 linux下的Select函数 7页 1下载券 Linuxselect函数的使用... 6页 1下载券 喜欢此文档...
windows编程中select函数的使用
windows编程中select函数的使用_计算机软件及应用_IT/计算机_专业资料。socket select...{...} } 二、linux c 中 select(I/O 多工机制) 表头文件 #i nclude<...
linux中select系统调用
linuxselect系统调用_计算机软件及应用_IT/计算机_专业资料。select 系统调用是...linuxselect函数的使用... 7页 免费 Linuxselect函数使用详... 6页 免费...
Linux串口select编程
Linux串口select编程_计算机软件及应用_IT/计算机_专业...的接口,具有连接线少,通讯简单,得到广泛的 使用。 ...串口终端函数 2.1 打开串口设备 int fd; char *...
Linux后台网络编程中select
linux网络编程select函数... 5页 免费 Linux网络编程 335页 1下载券 LINUX网络...select-server.c *purpose: 演示网络异步通讯、select 用法,这是服务器端程序 ...
更多相关标签: