目錄前言
一、程序間通訊的目的
二、linux程序間通訊方式簡介
程序間的通訊就是在不同程序之間傳播或者交換資訊。程序的使用者空間是相互獨顯然可以體用這幾樣的立的,一般而言是不能互相訪問的,唯一的例外是共享空間。但是系統空間卻是「
公共場所
」,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個程序當然可以通過磁碟上的普通檔案交換資訊,或者通過「登錄檔」或其他資料庫中的某些表項和記錄交換資訊。在廣義上,這也是程序間通訊的手段,到那時一般不把這算作程序間通訊。
(1)資料傳輸:乙個程序需要將它的資料傳送給另外乙個程序,傳送的資料量在乙個位元組到幾兆位元組之間。
(2)共享資料:多個程序想要操作共享資料,若乙個程序對共享資料進行修改,別的程序可以立刻看到
(3)通知事件:乙個程序需要向另乙個或一組程序傳送訊息,通知它發生了某件事件(在程序中止時要通知父程序)
(4)資源共享:多個程序之間需要共享同樣的資源。為了做到這一點,需要核心提供鎖和同步機制
(5)程序控制:有些程序希望完全控制另乙個程序的執行(例如debug程序),此時程序控制希望能夠攔截另乙個程序的所有資訊和異常,並能夠及時知道它的狀態。
在linux下程序間通訊的幾種主要方式如下:
(1)管道和有名管道。管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。
(2)訊號(signal)。訊號是比較複雜的通訊方式,用於通知接收程序有某種時間發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身,linux除了支援unix早期訊號語義函式signal外,還支援語義符合posix1,標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制的同時又能夠同一對外介面,用sigaction函式重新實現了signal函式)
訊號是在軟體層次上對中斷機制的一種模擬,是一種一步通訊方式
訊號可以直接進行使用者空間程序和核心程序之間的互動,核心程序也可以利用它來通知使用者空間程序發生了哪些系統事件,他可以在任何時候發給某一程序,而無需知道該程序的狀態。
如果該程序當前並未處於執行形態,則該訊號就由核心儲存起來,知道該程序恢復執行再傳遞給它;如果乙個訊號被程序設定為阻塞,則該訊號的傳遞被延遲,直到其阻塞被取消時才傳遞給程序
(3)訊息佇列 訊息佇列是訊息的鏈結表,包括posix訊息佇列和system v訊息佇列。有足夠許可權的程序可以向佇列中新增小夏,被賦予讀許可權的程序可以讀走佇列中的訊息,訊息佇列克服了訊號承載資訊量少、管道智慧型承載無格式位元組流,以及緩衝區大小受限等缺點。
(4)訊號量(semaphore)/訊號燈。訊號量主要被用作程序間或統一程序不同執行緒之間的同步手段,訊號量是用來解決程序之間的同步互斥問題的一種程序之間的通訊機制,包括乙個稱為訊號量的變數和在該訊號量下等待資源的程序等待佇列,以及對訊號量進行的兩個原子操作(pv操作)。由於訊號量對應於某一種資源,去乙個非負的整數值。訊號量的值是指當前可用的資源數量,若它等於0則意味著目前沒有可以用的資源。
(5)共享記憶體(shared memory)共享記憶體可以說是最有用的程序間通訊方式,也是最快的pc形式,兩個不同程序ab共享記憶體的意思是,同一塊物理記憶體被對映到程序a和程序b各自的程序位址空間內,程序a可以及時看到程序b對共享內中資料的更新,反之亦然。由於多個程序共享同一塊記憶體位址,必然需要某種同步機制,互斥鎖和訊號量都可以。採用共享記憶體通訊的乙個顯而易見的好處是效率高,因為程序可以直接讀寫記憶體,而不需要任何資料的複製。
(6)套接字(socket)套接字是更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊
linux 程序間通訊方式
1 無名管道通訊 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 高階管道通訊 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式...
linux程序間通訊方式
1 管道 pipe 2 命名管道 named pipe 3 訊號 signal 4 訊息 message 佇列 5 共享記憶體 6 訊號量 semaphore 7 套接字 socket 1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 ...
Linux 執行緒間通訊方式 程序通訊方式
1.linux下程序間通訊的幾種主要手段簡介 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊 訊號 signal 訊號是比較複雜的通訊方式,用於通知接受程序有某種事...