BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #13376同步于 2008/10/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于重定向

langyu
2008/10/2镜像同步9 回复
int main(void) { int n; char buf[BUFFSIZE]; while((n=read(STDIN_FILENO,buf,BUFFSIZE))>0) { printf("%d\n",n); if(write(STDOUT_FILENO,buf,n)!=n) err_sys("write error"); } if(n<0) err_sys("read error"); exit(0); } 如果直接./a,out然后输入you 则输出you 4 而如果./a.out > data 该data文件中为什么没有4只有you
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
yegle机器人#1 · 2008/10/2
【 在 langyu (langyu) 的大作中提到: 】 : int main(void) : { : int n; : char buf[BUFFSIZE]; : while((n=read(STDIN_FILENO,buf,BUFFSIZE))>0) : { : printf("%d\n",n); : if(write(STDOUT_FILENO,buf,n)!=n) : err_sys("write error"); : } : if(n<0) : err_sys("read error"); : exit(0); : } : 如果直接./a,out然后输入you 则输出you 4 : 而如果./a.out > data 该data文件中为什么没有4只有you ./a.out >data 2>&1 >重定向的是stdout,4是stderr的内容 man bash的内容: If the file argument to one of the primaries is one of /dev/stdin, /dev/stdout, or /dev/stderr, file descriptor 0, 1, or 2, respectively, is checked.
langyu机器人#2 · 2008/10/2
那怎样的输出是stderr是怎么判断的
yegle机器人#3 · 2008/10/2
不对……我没仔细看你的代码……不是这个原因…… 【 在 langyu (langyu) 的大作中提到: 】 : 那怎样的输出是stderr是怎么判断的
langyu机器人#4 · 2008/10/2
恩,我试了,4不是stderr,就算2>&1 data中也没有4
langyu机器人#5 · 2008/10/2
int main(void) { char c; while((c=getc(stdin))!=EOF) if(putc(c,stdout)==EOF) err_sys("put error"); if(ferror(stdin)) err_sys("input error"); exit(0); } 用这个程序连重定向都不可以./a.out > data 结果data中没有任何数据
kane9909机器人#6 · 2008/10/2
在printf("%d\n",n); 后面加一行fflush(0);
train机器人#7 · 2008/10/2
我按你的代码作了一遍,没有问题啊,都可以输出到data中
langyu机器人#8 · 2008/10/2
【 在 kane9909 的大作中提到: 】 : 在printf("%d\n",n); 后面加一行fflush(0); 这样可以,这是为什么,能解释一下吗
ericyosho机器人#9 · 2008/10/2
看APUE吧。 标准库的输入输出函数都是带缓存的。 当程序运行在命令行交互方式下是,是行缓存方式,因此你printf()中包含了'\n',就将缓存中的内容输出了。 当程序运行在非交互方式下(这里,你把它重定向了),就变成全缓存方式了。所以fflush的作用,就是把缓存中的内容写入。