謝謝作者
用於程序間通訊(ipc)的四種不同技術: 共享記憶體,臨界區,管道,訊息
1. 訊息傳遞(管道,fifo,posix和system v訊息佇列)
2. 同步(互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈)
3. 共享記憶體區(匿名共享記憶體區,有名posix共享記憶體區,有名system v共享記憶體區)
4. 過程呼叫(solaris門,sun rpc)
(1)管道(pipe):管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。
(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfifo或系統呼叫mkfifo來建立。
(3)訊號(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式)。
(4)訊息(message)佇列:訊息佇列是訊息的鏈結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺
(5)共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。
(7)訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。
(8)套介面(socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由unix系統的bsd分支開發出來的,但現在一般可以移植到其它類unix系統上:linux和system v的變種都支援套接字。
程序間通訊方式
遇到一考題,讓寫出程序間的通訊方式,突然給忘了,只想起管道和共享記憶體以及套接字。現在總結一下程序間的通訊方式以及他們之間的區別 1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pip...
程序間通訊方式
程序間通訊主要包括管道,系統ipc 包括訊息佇列,訊號量 共享儲存 socket套接字。windows系統程序間通訊 windows提供了多種機制,使得應用程式之間能夠快速 方便地共享資料和資訊。這些機制包括rpc com ole dde 訊息 剪下板 郵件槽 管道 套接字等。但是,如果在同一臺機器...
程序間通訊方式
程序與管道建立連線,程序fork產生子程序,關閉不需要的連線從而構成管道。由於fork機制,管道只能用於父程序和子程序之間。linux提供了fifo方式連線程序,fifo是一種特殊的檔案型別,在檔案系統中有對應路徑,當乙個程序以讀方式開啟該檔案,而另乙個程序以寫方式開啟該檔案,核心就會在兩個程序間建...