返回信息流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
这是一条镜像帖。来源:北邮人论坛 / cpp / #13376同步于 2008/10/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于重定向
langyu
2008/10/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 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.
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 的大作中提到: 】
: 在printf("%d\n",n); 后面加一行fflush(0);
这样可以,这是为什么,能解释一下吗
看APUE吧。
标准库的输入输出函数都是带缓存的。
当程序运行在命令行交互方式下是,是行缓存方式,因此你printf()中包含了'\n',就将缓存中的内容输出了。
当程序运行在非交互方式下(这里,你把它重定向了),就变成全缓存方式了。所以fflush的作用,就是把缓存中的内容写入。