#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#define MSG_TRY "try again\n"
#define MSG_TIMEOUT "time out\n"
int main(int argc, char *argv[])
{
char buf[10];
int fd, i, n;
fd = open("/dev/tty", O_RDONLY | O_NONBLOCK); //以非阻塞的方式打开控制窗口
if(fd < 0) //错误判断
{
perror("open error\n");
exit(1);
}
printf("open /dev/tty ok %d\n", fd);
for(i = 0; i < 5; i++) //循环5次 直到用户向屏幕输入数据
{
n = read(fd, buf, 10);
if(n > 0) //读到数据,立即跳出for循环
{
break;
}
if(error != EAGAIN)
{
perror("read error\n");
}else
{
//当 n < 0 时,且 errno = EAGAIN时 为 为阻塞时 未读到数据
write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
sleep(2); //sleep 两秒再读
}
}
if(i == 5) //五次计数结束,仍未读到数据
{
write(STDOUT_FILENO, MSG_TIMEOUT, strlen(MSG_TIMEOUT));
}else //将读到的数据写到屏幕中
{
write(STDOUT_FILENO, buf, n);
}
close(0);
return 0;
}
文件设置为非阻塞
最新推荐文章于 2024-01-05 11:32:50 发布