首页
学习
活动
专区
工具
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.2K20

Linux网络】select函数

select函数介绍 在Linux网络编程select 函数是一种非常有用的IO多路复用技术,它允许程序监视多个文件描述符(file descriptors),以等待一个或多个文件描述符变得“就绪”...所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类IO操作了,包括可读,可写,发生异常三种 select函数参数介绍 nfds select函数一次会等待多个文件描述符,nfds通常为设置的最大文件描述符...函数返回值 成功时,select返回就绪的文件描述符的总数....来保存程序需要等待的文件描述符,保证调用 select 的时候readfds 和 writefds的将如下: TCP服务器【多路复用版】 如果是一个select服务器进程,则服务器进程会不断的接收有新链接...readfds,如果有链接关闭,则将相对应的文件描述符从read_arrys数组拿走。

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

    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协程库安全使用...struct timeval old_timeout = { timeout.tv_sec, timeout.tv_usec }; while (true) { (void)select

    7.4K20

    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

    5K40

    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

    8000

    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.2K20

    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.8K10
    领券