我有我的孩子進程計算從文本文件中的單詞的頻率。我爲IPC使用pipe()
。子進程如何將單詞名稱和單詞頻率返回給父進程?我的源代碼使用C語言,我正在UNIX環境中執行它。當使用pipe()時,子進程如何向父進程返回兩個值?
回答
寫入到最大尺寸爲PIPE_BUF
的管道是原子的(包含在limits.h
中),因此您可以輕鬆地將信息打包到某種類型的結構中,並將其寫入父進程的子進程的管道中讀。舉例來說,你可以設置你的結構看起來像:
struct message
{
int word_freq;
char word[256];
};
後來乾脆讀您的管帶緩衝等於sizeof(struct message)
。這就是說,請記住,最好只有一個讀寫器管道,或者你可以有多個寫入器(因爲寫入是原子的),但同樣只有一個讀取器。儘管可以使用管道來管理多個讀取器,但讀取的原因是而不是原子意味着您最終可能會由於進程調度的非確定性性質而錯過消息,或者由於進程發生亂碼不會完成讀取並在管道中留下部分消息。
將兩個值寫入子項中管道的一端,並用一些分隔符分隔。在父項中,從管道的另一端讀取,並使用分隔符分隔內容。
使用換行符分隔記錄以及將單詞從與單詞相關聯的計數中分離出來的空間是合理的 - 換句話說,就是使用文本表示法,例如「異常性23」。 –
分隔符無關緊要;換行符與任何其他分隔符一樣好,但是,所有事情都是平等的,換行符是一個不錯的選擇。 –
- 1. 當我用python子進程Popen啓動進程時,如何關閉stdout-pipe?
- 2. 使用C中的exit()和wait()從子進程返回父進程的值
- 3. 使用子進程獲取返回值
- 4. 子進程的返回值
- 5. Pipe,Fork和Exec - 父子進程之間的雙向通信
- 6. 如何看父進程和子進程
- 7. Unix進程PIPE
- 8. 父進程和子進程時間
- 9. 子進程/父進程
- 10. 父進程等到子進程終止時,子進程如何才能殺死父進程?
- 11. 使用子進程同時執行兩個進程的問題
- 12. 返回從子進程其用C父值與叉()
- 13. 子進程如何使用fork()從父進程繼承數據?
- 14. 當子進程死亡時通知父進程
- 15. 當父進程停止時停止子進程
- 16. 使用stdout重定向的Python子進程返回一個int
- 17. 當兩個子進程都通過管道與父進程通信時,一個子進程阻塞了另一個子進程
- 18. 如何從子進程寫入父進程的值?
- 19. 如何使用clone()使父進程和子進程同時運行?
- 20. 當子進程在Python中運行時,如何從子進程PIPE獲取數據?
- 21. 子shell進程雙向重定向到父進程
- 22. 父進程在C#中終止時如何終止子進程
- 23. 如何同時運行子進程和父進程
- 24. 如果您從子進程fork()和exec(),並在父進程中等待,父進程如何從子進程獲取返回代碼?
- 25. fork()如何返回子進程
- 26. Shell:非子進程的返回值
- 27. Python子進程返回-11
- 28. 在linux中使用管道使用父進程和子進程
- 29. 使用Fork()和Pipe()將文件拆分爲多個子進程
- 30. C使用exec和pipe創建多個子進程
你到目前爲止嘗試過什麼?你有沒有你無法工作的代碼? – 2011-09-28 03:21:35
你知道如何創建管道嗎?你知道如何發送任何東西嗎? – Beta