使用pipe()时子进程如何将两个值返回给父进程?

时间:2011-09-28 03:19:01

标签: c unix ipc pipe

我让我的子进程计算文本文件中单词的频率。我正在使用pipe()进行IPC。子进程如何将单词名称和单词频率返回给父进程?我的源代码在C中,我在UNIX环境中执行它。

2 个答案:

答案 0 :(得分:3)

将两个值写入子项中管道的一端,用分隔符分隔。在父级中,从管道的另一端读取,并使用分隔符分隔内容。

答案 1 :(得分:2)

写入大小为PIPE_BUF的管道是原子的(包含在limits.h中),因此您可以轻松地将您的信息打包到某种类型的结构中,并将其写入您的管道中父进程读取的子进程。例如,您可以将结构设置为:

struct message
{
    int word_freq;
    char word[256];
};

然后只需使用等于sizeof(struct message)的缓冲区从管道读取。话虽如此,请记住,最好只有一个读取器/写入器到管道,或者你可以有多个写入器(因为写入是原子的),但同样,只有一个读取器。虽然可以使用管道管理多个读取器,但读取原子的事实意味着您最终会遇到由于进程调度的非确定性而导致错过消息的情况,或者您得到的情况消息,因为进程没有完成读取并在管道中留下部分消息。