Chinaunix
标题:
fcntl系统调用
[打印本页]
作者:
whoisliang
时间:
2009-01-04 16:30
标题:
fcntl系统调用
#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 编辑
]
作者:
wenrsh
时间:
2009-01-05 17:46
只有文件描述符
文件呢
int fd;
fd=open(...)
作者:
whoisliang
时间:
2009-01-07 13:58
标题:
回复 #2 wenrsh 的帖子
0和1号文件(stdin stdout stderr)系统始终是打开的
作者:
duanjigang
时间:
2009-01-08 16:33
LZ是要做个交互界面吗???
先说明你的用途然后再贴程序。。。
还有,尽量代码用code括起来,方便别人阅读
作者:
whoisliang
时间:
2009-01-08 20:31
照着LDD3中源代码改了一点点,就出现以上问题.大家将源代码copy之后编译试试就能明白我的问题,要我说很难说明白.
作者:
chrisli84
时间:
2009-01-09 16:05
输入命令的时候,把标准输入重定向,好像就没问题了。
./test 3 <file
我这样试了一下,可以运行。但是不知道为什么,也不知道你的程序是想干什么。呵呵。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2