0
A
回答
6
對IPC使用信號有點不方便和原始。你應該選擇Unix套接字(不是TCP套接字!)和管道。
管道通常更容易編程,因爲它們保證PIPE_BUF
大小以下的單個write
是原子的。然而他們確實有他們的限制。例如,當寫入程序比讀取程序快時,寫入程序在管道緩衝區滿了時開始阻塞。默認情況下,這個緩衝區的大小約爲64k,至少在Linux下,不能在沒有重新編譯內核的情況下進行更改。管道也是單向的,這意味着你必須在每個過程中保留一對管道,一個用於讀取,一個用於寫入。
Unix套接字具有可配置的發送緩衝區大小和更高級的編程接口。
+3
管道對這樣的讀寫操作沒有任何保證,並且很容易構建一個簡單的程序來顯示一個'read'可以組合多個'write'調用。 (請參閱:http://pastebin.com/LxbreJke)另外,一般不應該對緩衝區大小做出假設(64k緩衝區是一個相當近期的變化:我經常使用舊的Linux boxen,因爲人們拒絕更新。) 。管道和套接字之間的主要區別在於FIFO管道是單向的,Unix套接字是雙向的。 – Thanatos 2011-06-14 07:07:17
相關問題
- 1. 使用tcp在同一臺機器上的進程間通信
- 2. 同一臺機器上的進程間通信
- 3. 如何在同一臺機器上的程序之間進行通信?
- 4. 在兩臺機器上運行的進程之間的通信
- 5. 在同一臺機器上的ASP.NET應用程序之間進行通信
- 6. 在不同計算機上的進程之間進行通信
- 7. 位於一臺機器上或兩臺機器上的兩個進程的Java nio套接字通信
- 8. 進程間通信:一臺服務器和多臺客戶機
- 9. 2臺不同服務器如何在同一臺「機器」中進行通信?
- 10. 同一臺計算機上的兩個程序之間的通信 - 如何?
- 11. Windows上進程之間的異步信號或通知
- 12. 通過文件或套接字在同一臺機器上進行客戶機 - 服務器通信
- 13. 在同一主機上的兩個容器之間的通信
- 14. Erlang在兩臺計算機上進行兩個進程通信
- 15. 在同一個盒子上的c#進程間通信
- 16. 如何在兩臺Android手機上進行WLAN通信
- 17. 插座不通信
- 18. 與信號進程通信
- 19. TFS在同一臺機器上在構建控制器和構建代理之間進行通信的問題
- 20. 窗口上的進程間通信
- 21. MacOSX Lion上的進程間通信
- 22. MATLAB上的進程間通信
- 23. UNIX上的進程間通信
- 24. Heroku上的進程間通信
- 25. 如何在C#中進行進程間通信時進行進程間通信?
- 26. 套接字通信在同一臺機器上工作,但不在不同機器之間
- 27. 如何使用Qt中的信號和插槽進行線程間通信
- 28. 如何通過同一臺機器上的TCP套接字在java中進行通信
- 29. 兩個例程在相同的信道上進行通信
- 30. epoll_wait阻塞信號插座
您能詳細說明兩個過程之間可以傳遞的信息嗎?有很多Interprocess通信方法。 – Jay 2011-06-14 06:25:29
使用IPC的信號就像選擇郵件的pidgeons。有更方便的選擇。 – 2011-06-14 06:36:21
如果可能,請避免信號;他們是非常原始的,而且他們能做的事情有限。 – 2011-06-14 06:46:41