2011-09-28 34 views
2

我有我的孩子進程計算從文本文件中的單詞的頻率。我爲IPC使用pipe()。子進程如何將單詞名稱和單詞頻率返回給父進程?我的源代碼使用C語言,我正在UNIX環境中執行它。當使用pipe()時,子進程如何向父進程返回兩個值?

+1

你到目前爲止嘗試過什麼?你有沒有你無法工作的代碼? – 2011-09-28 03:21:35

+0

你知道如何創建管道嗎?你知道如何發送任何東西嗎? – Beta

回答

2

寫入到最大尺寸爲PIPE_BUF的管道是原子的(包含在limits.h中),因此您可以輕鬆地將信息打包到某種類型的結構中,並將其寫入父進程的子進程的管道中讀。舉例來說,你可以設置你的結構看起來像:

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

後來乾脆讀您的管帶緩衝等於sizeof(struct message)。這就是說,請記住,最好只有一個讀寫器管道,或者你可以有多個寫入器(因爲寫入是原子的),但同樣只有一個讀取器。儘管可以使用管道來管理多個讀取器,但讀取的原因是而不是原子意味着您最終可能會由於進程調度的非確定性性質而錯過消息,或者由於進程發生亂碼不會完成讀取並在管道中留下部分消息。

3

將兩個值寫入子項中管道的一端,並用一些分隔符分隔。在父項中,從管道的另一端讀取,並使用分隔符分隔內容。

+1

使用換行符分隔記錄以及將單詞從與單詞相關聯的計數中分離出來的空間是合理的 - 換句話說,就是使用文本表示法,例如「異常性23」。 –

+0

分隔符無關緊要;換行符與任何其他分隔符一樣好,但是,所有事情都是平等的,換行符是一個不錯的選擇。 –

相關問題