【问题标题】:Pipe behavior is erratic, not confident about implementation管道行为不稳定,对实施没有信心
【发布时间】:2015-02-28 06:04:25
【问题描述】:

我正在学习 Linux 中的 ipc 并尝试使用管道。我在父进程和两个子进程之间建立了两个管道。当数据通过管道时,我得到了奇怪的换行符。例如,输出有时会有一个额外的换行符或完全没有换行符,甚至出现在命令行本身上。另外,我不确定我设置管道的方式是否正确。我可能忽略了一些重要的细节并留下了悬空的文件描述符。

void run_processes(Command_Args *cmd_args, char *file_paths)
{
        pipe(pipe_RtoA1);
        pipe(pipe_RtoA2);
        pipe(pipe_A1toT1);
        pipe(pipe_A2toT2);
        pipe(pipe_T1toR);
        pipe(pipe_T2toR);

        if (!(pid_A1 = fork())) {
                long read = 0;
                size_t size = 0;
                char *input_str = NULL;
                close(pipe_RtoA1[1]);
                dup2(pipe_RtoA1[0], 0);

                read = getline(&input_str, &size, stdin);
                printf("A1 : %s\n", input_str);
        } else if (!(pid_A2 = fork())) {
                long read = 0;
                size_t size = 0;
                char *input_str = NULL;
                close(pipe_RtoA2[1]);
                dup2(pipe_RtoA2[0], 0);

                read = getline(&input_str, &size, stdin);
                printf("A2 : %s\n", input_str);
        } else {
                FILE *fRtoA1 = NULL;
                FILE *fRtoA2 = NULL;
                fRtoA1 = fdopen(pipe_RtoA1[1], "w");
                fRtoA2 = fdopen(pipe_RtoA2[1], "w");
                close(pipe_RtoA1[0]);
                close(pipe_RtoA2[0]);
                fprintf(fRtoA1, "%s", file_paths);
                fprintf(fRtoA2, "%s", file_paths);
        }

}

我打算让管道连接到其他进程,但现在我只想让管道从这个程序 R 到另外两个程序 A1A2 工作。

程序R 将发送file_paths 做管道,A1A2 将打印它们。

【问题讨论】:

    标签: c pipe


    【解决方案1】:

    您正在启动两个不同的进程,它们以不可预知的顺序输出到标准输出。它们的输出可能是交错的。只是为了确保,打开每个子进程的输出文件,并检查内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2022-12-18
      • 2023-04-10
      • 1970-01-01
      • 2012-04-24
      • 2012-12-20
      相关资源
      最近更新 更多