Setbuf(stdout,0)和fflush不起作用

时间:2018-02-19 19:59:10

标签: c printf buffer posix

出于某种奇怪的原因

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)

0 个答案:

没有答案