2011-06-14 79 views
0

在我看來,signalsocket可以用於這項工作,在同一臺機器上,信號或插座上的進程間通信如何決定?

你如何決定實際使用哪一個?

+2

您能詳細說明兩個過程之間可以傳遞的信息嗎?有很多Interprocess通信方法。 – Jay 2011-06-14 06:25:29

+1

使用IPC的信號就像選擇郵件的pidgeons。有更方便的選擇。 – 2011-06-14 06:36:21

+0

如果可能,請避免信號;他們是非常原始的,而且他們能做的事情有限。 – 2011-06-14 06:46:41

回答

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

相關問題