- 论坛徽章:
- 0
|
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
char buffer[4096];
int main(int argc,char** argv)
{
int delay=1,n,m=0;
if(argc>1)
delay=atoi(argv[1]);
fcntl(0,F_SETFL,fcntl(0,F_GETFL) | O_NONBLOCK);
fcntl(1,F_SETFL,fcntl(1,F_GETFL) | O_NONBLOCK);
while(1){
n=read(0,buffer,4096);
if(n==-1){
printf("errno=%i %s\n",errno,perror("because"));
}
if(n>=0)
m=write(1,buffer,n);
if((n<0 || m<0) &&(errno!=EAGAIN))
break;
sleep(delay);
}
perror(n<0?"stdin":"stdout");
exit(1);
return 0;
}
为什么如下执行时会出现:
[root@kal root]# ./mynbtest 3
because: Resource temporarily unavailable
errno=29 ? ?
stdin: Illegal seek
[root@kal root]#
如果去掉 if(n==-1){
printf("errno=%i %s\n",errno,perror("because"));
}
本程序就:
光标在闪,但不动,输入字符后回车,3秒后输入的字符自动出现.
[ 本帖最后由 whoisliang 于 2009-1-4 17:08 编辑 ] |
|