免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2089 | 回复: 5
打印 上一主题 下一主题

fcntl系统调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-04 16:30 |只看该作者 |倒序浏览
#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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-01-05 17:46 |只看该作者
只有文件描述符
文件呢
int fd;
fd=open(...)

论坛徽章:
0
3 [报告]
发表于 2009-01-07 13:58 |只看该作者

回复 #2 wenrsh 的帖子

0和1号文件(stdin stdout stderr)系统始终是打开的

论坛徽章:
0
4 [报告]
发表于 2009-01-08 16:33 |只看该作者
LZ是要做个交互界面吗???
先说明你的用途然后再贴程序。。。
还有,尽量代码用code括起来,方便别人阅读

论坛徽章:
0
5 [报告]
发表于 2009-01-08 20:31 |只看该作者
照着LDD3中源代码改了一点点,就出现以上问题.大家将源代码copy之后编译试试就能明白我的问题,要我说很难说明白.

论坛徽章:
0
6 [报告]
发表于 2009-01-09 16:05 |只看该作者
输入命令的时候,把标准输入重定向,好像就没问题了。
./test 3 <file

我这样试了一下,可以运行。但是不知道为什么,也不知道你的程序是想干什么。呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP