文件设置为非阻塞

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值