当前位置:首页 >> 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函数的使用
linux下的Select函数 7页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 linuxselect函数使用 linuxselect...
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系统调用
linuxselect系统调用_计算机软件及应用_IT/计算机_专业资料。select 系统调用是.../*然 后调用 select 函数*/ 这样就可以使用一个开关语句(switch 语句)来判断...
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下载券 喜欢此文档...
Linux串口select编程
Linux串口select编程_计算机软件及应用_IT/计算机_专业资料。Linux 下串口程序开发...2.1 读串口读取串口数据使用文件操作 read 函数读取,如果设置为原始模式(Raw Mod...
Linux后台网络编程中select
linux视频教程-Apache服... 44页 2下载券L​i​n​u​x​后​台...使用 select 完成非阻塞方式 IO (non-block,进程或线程执行此函数时不必非要等待...
windows编程中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_...
windows和linux套接字中的select机制浅析
windows 和 linux 套接字中的 select 机制浅析先来谈谈为什么会出现 select 函数,也就是 select 是解决什么问题的? 平常使用的 recv 函数时阻塞的,也就是如果没...
Linux下select函数实现的聊天服务器
Linuxselect函数实现的聊天服务器_IT/计算机_专业资料。Linux select函数Linuxselect 函数实现的聊天服务器 Linuxselect 函数实现的聊天服务器 Windows 下...
更多相关标签:
linux select用法 | select 函数用法 | js select 函数用法 | select函数的用法 | sql select 函数用法 | excel select函数用法 | select查询函数用法 | linux select函数 |