【发布时间】:2011-09-28 03:19:00
【问题描述】:
我让我的子进程计算文本文件中单词的频率。我正在为 IPC 使用pipe()。子进程如何将词名和词频同时返回给父进程?我的源代码是 C 语言,我在 UNIX 环境中执行它。
【问题讨论】:
-
到目前为止你尝试过什么?您是否有任何无法使用的代码?
-
你知道如何创建管道吗?你知道怎么寄东西吗?
我让我的子进程计算文本文件中单词的频率。我正在为 IPC 使用pipe()。子进程如何将词名和词频同时返回给父进程?我的源代码是 C 语言,我在 UNIX 环境中执行它。
【问题讨论】:
将这两个值写入子管道的一端,用分隔符分隔。在父级中,从管道的另一端读取,并使用分隔符分隔内容。
【讨论】:
paranormality 23 这样的文本表示'。
写入到PIPE_BUF 大小的管道是原子的(包含在limits.h 中),因此您可以轻松地将您的信息打包到某种类型的结构中,并将其写入您子进程中的管道中父进程读取。例如,您可以将结构设置为:
struct message
{
int word_freq;
char word[256];
};
然后只需使用等于sizeof(struct message) 的缓冲区从管道中读取。话虽如此,请记住,最好只有一个读取器/写入器连接到管道,或者您可以有多个写入器(因为写入是原子的),但同样只有一个读取器。虽然可以使用管道管理多个读取器,但读取不是原子的事实意味着您最终可能会遇到由于进程调度的不确定性而丢失消息的情况,或者您得到乱码消息,因为进程未完成读取并将部分消息留在管道中。
【讨论】: