首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux select函数详解

http://blog.csdn.net/lingfengtengfei/article/details/12392449 在Linux,我们可以使用select函数实现I/O端口的复用,传递给 select...当有一个描述符做好准备或者是捕获到一个信号时函数会返回。如果捕获到一个信号, select函数将返回 -1,并将变量 erro设为 EINTR。    ...,一定等到监视文件描述符集合某个文件描述符发生变化为止;第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;...(2)当没有满足条件的文件描述符,且设置的timeval监控时间超时时,select函数会返回一个为0的值。 (3)当select返回负值时,发生错误。...理解select模型: 理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set的每一bit可以对应一个文件描述符fd。

5.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

IO复用——select函数

I/O复用——select函数 select函数 select函数让进程告诉内核,等待数个事件,某个事件发生或者达到指定时间时,唤醒进程。...例如,我们可以调用select函数,通知内核,以下几种情况需要返回, 描述字集合{1,4,5}任意一个描述字准备好被读 描述字集合{2,7}任意一个描述字准备好写 描述字集合{1,4}任意一个描述字发生异常待处理...什么是“描述字准备好” 前面一直讨论的“描述字准备好”,在select函数处理的时候,具体条件如下: 准备好读 下面四个条件任意满足一个,套接口准备好读: 套接口接收缓冲区的数据字节数大于等于套接口接收缓冲区低潮限度...在新版函数str_cli,由select处理以下条件: 如果对方TCP发送数据,套接口就变为可读且read返回大于0的值(数据字节数)。...[函数str_cliselect处理的条件] 修改函数str_cli [str_cli函数select版本与初始版本对比] 使用函数select 在新版的str_cli函数,使用select函数

1.1K51

Linux的sleep、usleep、nanosleep、poll和select

在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?...下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 有些是基于alarm实现的,所以不能和alarm同时使用...也可实现实际睡眠时长不小于参数指定时长 clock_nanosleep 系统调用 纳秒 是 不确定 区别于nanosleep,可选择为相对或绝对时间,其次是可以选择使用哪个时钟 poll 系统调用 毫秒 是 是 在协程库libco可安全使用... * 1000 }; while ((-1 == nanosleep(&ts, &ts)) && (EINTR == errno)); } 3) 基于poll的秒级封装 // 可libco协程库安全使用...void pollsleep(int milliseconds) { (void)poll(NULL, 0, milliseconds); } 4) 基于select的毫秒级封装 void selectsleep

4.9K40

Linux的sleep、usleep、nanosleep、poll和select

在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?...下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 有些是基于alarm实现的,所以不能和alarm同时使用...也可实现实际睡眠时长不小于参数指定时长 clock_nanosleep 系统调用 纳秒 是 不确定 区别于nanosleep,可选择为相对或绝对时间,其次是可以选择使用哪个时钟 poll 系统调用 毫秒 是 是 在协程库libco可安全使用...1000 }; while ((-1 == nanosleep(&ts, &ts)) && (EINTR == errno)); } 3) 基于poll的秒级封装 // 可libco协程库安全使用...struct timeval old_timeout = { timeout.tv_sec, timeout.tv_usec }; while (true) { (void)select

7.2K20

mysqlselect子查(selectselect子查询)询探索

mysqlselect子查询探索 表结构 emp +--------------+---------------+------+-----+-------------------+----------...的子查询 mysql> select ename,(select dname from dept d where e.deptno = d.deptno) as dname from emp e...到这里对于select子查询的执行顺序更迷惑了,不知道DEPENDENT SUBQUERY到底时怎么执行的,到底有没有生产临时表,但是可以明确这种子查询的效率不如join好 注意事项 在select子查询...returns more than 1 row 子查询的limit mysql> select d.dname,(select e.ename from emp e where e.deptno =...子查询除了使用limit还可以使用order by,根据某种条件排序返回第一个或者最后一个 mysql> select d.dname,(select e.ename from emp e where

4400

linuxgetchar函数用法,linux getchar函数使用

1 函数介绍 1) 函数原型 int getchar(void); 2) 函数功能 从stdin读取一个字符。 3) 返回值 返回读取字符的ASCII值或者EOF字符或者出错值。...4) 头文件 #include 2 函数使用 2.1 getchar函数的特点 Linux下编写的一个例子: #include int main(void) { char ch; int num...] //提示:当程序运行到while循环中的getchar时,界面等待用户输入字符,直到回车出现 input your strings: 输入字符串:hello getchar 在输入这段字符串的过程getchar...2) getchar每次只读取一个字符,如果程序不采用循环而只设置一个getchar()语句,则getchar只读取输入字符串的首个字符,其余字符依然留在缓存区(若将程序的while循环去掉只输出第一个字符...重新编译并运行程序,输入字符串:hello[回车] 得第一次运行结果 当程序首次执行到while的getchar时,getchar函数等待用户的输入,getchar函数一直等待用户输入,当用户按下回车表示用户输入完毕

3.1K30

【Kotlin 协程】协程的多路复用技术 ② ( select 函数原型 | SelectClauseN 事件 | 查看挂起函数是否支持 select )

一、select 函数原型 ---- 在上一篇博客 【Kotlin 协程】协程的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 ) , 介绍了...协程多路复用技术 , 多路复用 主要使用 select 代码块 实现 , 在 select 代码块 调用多个协程的 onAwait 函数 , 哪个协程先返回数据 , 就选择该协程的数据作为返回值 ;...{it} } 在 select 代码块 调用多个 Channel 通道的 onReceive 函数 , 哪个通道先返回数据 , 就选择该通道的数据作为返回值 ; val num = select<Int...clause 事件 ---- 协程的多路复用 主要是在 select 代码块实现 , 能够在 select 执行的多路复用事件 , 称为 SelectClauseN 事件 : SelectClause0...*/ public val onSend: SelectClause2> 另外也可以参考下面的表格Select clause 定义 , 这是 select 函数文档内容

1.1K20

Linuxselect使用陷阱

Select函数使用简单,其工作原理大家通常也知道,但是在实际的使用过程可能并没有严格遵守,而且确实也比较难以完全遵守,除非不使用它。...Select采用一个bit表,每个fd对应表的一个bit位,宏FD_SETSIZE为表的大小,添加到fd_set的fd值必须小于FD_SETSIZE,否则就会越界,假设有如下一段代码: fd_set...通过ulimit命令和setrlimit函数来修改进程内句柄数的限制,并不会影响FD_SETSIZE的值,所以即使通过ulimit命令或setrlimit函数将进程允许的句柄改成很大了,但如果FD_SETSIZE...较容易发生在服务端程序,因为服务端程序同一时刻的连接数很容易超过默认的FD_SETSIZE值,而服务端的代码可能是使用epoll使用的,所以它本身并不会存在问题,但是程序可能还有个客户端,比如使用了...那就是尽量不使用select,而应当使用更安全的poll函数来替代,因为poll使用的数组是调用者自己维护的,完全可以保证不越界。

2K40

linux的sleep函数和delay函数

对于做过单片机程序的朋友来说,delay是很常见的函数,通常就是while或者for循环,进行空指令的执行,由于单片机的晶振固定,一个机器周期的时间是固定的,执行多少个空指令, 就可以完成多少个机器周期时长的延时...其实在linux的delay函数,道理是一样的,都是通过cpu执行空指令来达到延时的目的,但是对于操作系统这种多线程进行的方式来说,在需要延时的时候,可以通过将进程挂起的方式来实现延时。...这就是sleep函数。 sleep和delay的区别 最明显也最重要的区别就是,在执行delay的时候,是执行了空指令,虽说是空的,但是还是会占用硬件资源,cpu要进行运算。

3.7K10

linux驱动ioctl函数,Linux与驱动相关的ioctl函数

ioctl是设备驱动程序对设备的I/O通道进行管理的函数,所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如,在串口线上收发数据通过read/write操作,而串口的波特率、校验位、停止位通过...ioctl函数是文件结构的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。...设备节点赋值,”/dev/video0″是真实的物理摄像头设备在linux的表示 if (videodevice == NULL || *videodevice == 0) { videodevice...调用设备初始化函数 struct vdIn videoIn;//在spcav4l.h定义 videodevice = “/dev/video0”; //节点 int width = 352; //宽...调用函数ioctl (vd->fd, VIDIOCGCAP, &(vd->videocap))成功后可读取vd->capability各分量 video_capability是Video4linux支持的数据结构

2.2K180
领券