linux select 阻塞模式,linux select函數用法 && 阻塞與非阻塞IO

本文详细介绍了Linux系统调用select的使用方法,包括参数解析、文件描述符管理以及阻塞与非阻塞IO的概念。通过示例代码展示了如何使用select检测键盘输入,并分析了在标准输出前显示的原因。同时,讨论了阻塞IO在多设备监控中的限制及其与非阻塞IO的区别,强调了select在解决设备同步问题上的优势。
摘要由CSDN通过智能技术生成

select系統調用是用來讓我們的程序監視多個文件句柄的狀態變化的。程序會停在select這里等待,直到被監視的文件句柄有一個或多個發生了狀態改變。關於文件句柄,其實就是一個整數,我們最熟悉的句柄是0、1、2三個,0是標准輸入,1是標准輸出,2是標准錯誤輸出。0、1、2是整數表示的,對應的FILE *結構的表示就是stdin、stdout、stderr。

函數原型是:int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);參數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。

select函

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值