我們先看一下select的參數列表
- 參數解釋
參數nfds是需要監視的最⼤大的⽂文件描述符值+1;
rdset,wrset,exset分別對應於需要檢測的可讀⽂文件描述符的集合,可寫⽂文件描述符的集 合及異常⽂文 件描述符的集合;
參數timeout爲結構timeval,⽤用來設置select()的等待時間
- 關於fd_set的接口
void FD_CLR(int fd, fd_set *set); // ⽤用來清除描述詞組set中相關fd 的位 int >FD_ISSET(int fd, fd_set *set); // ⽤用來測試描述詞組set中相關fd 的位是否爲真
void FD_SET(int fd, fd_set *set); // ⽤用來設置描述詞組set中相關fd的位
void FD_ZERO(fd_set *set); // ⽤用來清除描述詞組set的全部位
好了,有了這幾個接口寫一個select檢測檢測標準輸入的代碼吧
#include<stdio.h>
#include<fcntl.h>
#include<sys/select.h>
int main()
{
fd_set read_fds;
FD_ZERO(&read_fds);
FD_SET(0, &read_fds);
for(;;)
{
printf("test1_15");
fflush(stdout);
int ret = select(1,&read_fds, NULL, NULL,NULL);
if(ret < 0)
{
perror("select");
continue;
}
if(FD_ISSET(0, &read_fds))
{
char buf[1024] = {0};
read(0, buf, sizeof(buf) -1);
printf("input : %s ", buf);
}
else
{
printf("error ! invaild fd\n");
continue;
}
FD_ZERO(&read_fds);
FD_SET(0, &read_fds);
}
return 0;
}