当使用pipe()时,子进程如何向父进程返回两个值?

问题描述:

我有我的孩子进程计算从文本文件中的单词的频率。我为IPC使用pipe()。子进程如何将单词名称和单词频率返回给父进程?我的源代码使用C语言,我正在UNIX环境中执行它。当使用pipe()时,子进程如何向父进程返回两个值?

+1

你到目前为止尝试过什么?你有没有你无法工作的代码? – 2011-09-28 03:21:35

+0

你知道如何创建管道吗?你知道如何发送任何东西吗? – Beta

写入到最大尺寸为PIPE_BUF的管道是原子的(包含在limits.h中),因此您可以轻松地将信息打包到某种类型的结构中,并将其写入父进程的子进程的管道中读。举例来说,你可以设置你的结构看起来像:

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

后来干脆读您的管带缓冲等于sizeof(struct message)。这就是说,请记住,最好只有一个读写器管道,或者你可以有多个写入器(因为写入是原子的),但同样只有一个读取器。尽管可以使用管道来管理多个读取器,但读取的原因是而不是原子意味着您最终可能会由于进程调度的非确定性性质而错过消息,或者由于进程发生乱码不会完成读取并在管道中留下部分消息。

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

+1

使用换行符分隔记录以及将单词从与单词相关联的计数中分离出来的空间是合理的 - 换句话说,就是使用文本表示法,例如“异常性23”。 –

+0

分隔符无关紧要;换行符与任何其他分隔符一样好,但是,所有事情都是平等的,换行符是一个不错的选择。 –