示例
使用 select 函数监控标准输入,如果有输入,则打印相应的信息
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
int main(void)
{
int ret;
int maxfd = 0;
fd_set readfds,tmpfds;
struct timeval tv = {3,0},tmp_tv;
char buffer[64] = {0};
FD_ZERO(&readfds);
FD_SET(0,&readfds);// 将标准输入读文件描符合集合中
for(;;){
tmp_tv = tv;
tmpfds = readfds;
ret = select(maxfd + 1,&tmpfds,NULL,NULL,&tmp_tv);
if (ret == -1){
perror("[ERROR] select(): ");
exit(EXIT_FAILURE);
}else if (ret == 0){ // 超时返回
printf("Timeout.\n");
}else if (ret > 0){
if (FD_ISSET(0,&tmpfds)){ // 判断是否在集合中
fgets(buffer,sizeof(buffer),stdin);
printf("buffer : %s ",buffer);
}
}
}
return 0;
}
练习
使用 select 监听有名管道,当有名管道有数据时,读取数据并打印