資料 linux程序間通訊的方式

2022-04-29 17:54:08 字數 1991 閱讀 3839

管道( pipe )

:管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。

# 命名管道 (named pipe)

: 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

# 訊號量( semophore )

: 訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。

# 

訊號 ( sinal )

: 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

# 共享記憶體( shared memory )

:共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。

# 套接字( socket )

: 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。

程序間通訊就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是「公共場所」,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個程序當然也可以通過磁碟上的普通檔案交換資訊,或者通過「登錄檔」或其它資料庫中的某些表項和記錄交換資訊。廣義上這也是程序間通訊的手段,但是一般都不把這算作「程序間通訊」。因為那些通訊手段的效率太低了,而人們對程序間通訊的要求是要有一定的實時性。 

程序間通訊主要包括管道, 系統ipc(包括訊息佇列,訊號量,共享儲存), socket.

管道包括三種:1)普通管道pipe, 通常有種限制,一是半雙工,只能單向傳輸;二是只能在父子程序間使用. 2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸. 3)命名管道:name_pipe, 去除了第二種限制,可以在許多並不相關的程序之間進行通訊.

系統ipc的三種方式類同,都是使用了核心裡的識別符號來識別.

faq1: 管道與檔案描述符,檔案指標的關係?

答: 其實管道的使用方法與檔案類似,都能使用read,write,open等普通io函式. 管道描述符來類似於檔案描述符. 事實上, 管道使用的描述符, 檔案指標和檔案描述符最終都會轉化成系統中socket描述符. 都受到系統核心中socket描述符的限制. 本質上linux核心原始碼中管道是通過空檔案來實現.

faq2: 管道的使用方法?

答: 主要有下面幾種方法: 1)pipe, 建立乙個管道,返回2個管道描述符.通常用於父子程序之間通訊. 2)popen, pclose: 這種方式只返回乙個管道描述符,常用於通訊另一方是stdin or stdout; 3)mkpipe: 命名管道, 在許多程序之間進行互動.

faq3: 管道與系統ipc之間的優劣比較?

答: 管道: 優點是所有的unix實現都支援, 並且在最後乙個訪問管道的程序終止後,管道就被完全刪除;缺陷是管道只允許單向傳輸或者用於父子程序之間.

系統ipc: 優點是功能強大,能在毫不相關程序之間進行通訊; 缺陷是關鍵字key_t使用了核心標識,占用了核心資源,而且只能被顯式刪除,而且不能使用socket的一些機制,例如select,epoll等.

faq4: windos程序間通訊與linux程序間通訊的關係?

答: 事實上,windos的程序通訊大部分移植於unix, windos的剪貼簿,檔案對映等都可從unix程序通訊的共享儲存中找到影子.

faq5: 程序間通訊與執行緒間通訊之間的關係?

答: 因為windows執行的實體是執行緒, 狹義上的程序間通訊其實是指分屬於不同程序的執行緒之間的通訊.而單個程序之間的執行緒同步問題可歸併為一種特殊的程序通訊.它要用到核心支援的系統呼叫來保持執行緒之間同步. 通常用到的一些執行緒同步方法包括:event, mutex, 訊號量semaphore, 臨界區資源等.

linux 程序間通訊方式

1 無名管道通訊 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 高階管道通訊 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式...

Linux程序間通訊方式

目錄前言 一 程序間通訊的目的 二 linux程序間通訊方式簡介 程序間的通訊就是在不同程序之間傳播或者交換資訊。程序的使用者空間是相互獨顯然可以體用這幾樣的立的,一般而言是不能互相訪問的,唯一的例外是共享空間。但是系統空間卻是 公共場所 所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪...

linux程序間通訊方式

1 管道 pipe 2 命名管道 named pipe 3 訊號 signal 4 訊息 message 佇列 5 共享記憶體 6 訊號量 semaphore 7 套接字 socket 1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 ...