出于某种奇怪的原因
setbuf(stdout, 0);
只有在父进程中使用时才适用于我的情况。
我需要我的子进程从管道读取并将数据写入文件;我将STDIN_FILENO和STDOUT_FILENO重定向到相应的文件;
必须提到阅读过程如下:
void read_from_pipe(void)
{
char command[100];
int new_fd = open(pipe_name,O_RDONLY,0644);
int output_file = open("new_file",O_WRONLY|O_CREAT,0644);
dup2(new_fd,STDIN_FILENO);
dup2(output_file,STDOUT_FILENO);
while(1)
{
scanf("%s",command);
if(strcmp(command,"stop")==0)
{
close(output_file);
close(new_fd);
exit(0);
}
else
{
printf("%s ",command);
fflush(stdout);
}
}
}
问题是,如果我执行CTRL-C,子进程不会将任何数据写入输出文件?
我尝试用fflush(stdin)强制它;
它没有用;
我尝试使用setbuf(stdout,0);在孩子的过程中,它也没有用;
我找到的唯一解决方案是写作
setbuf(stdout, 0);
父进程中的;
有人可以解释为什么只有在父进程中编写才有效吗?
谢谢!
后来编辑:
我尝试了以下代码:
这可能与操作系统有关吗? (我正在使用Ubuntu 16.04 LTS)