**:
linux程序間通訊(ipc)有幾種方式,下面將將簡單的簡述一下:
一。管道(pipe)
管道是linux支援的最初ipc方式,管道可分為無名管道,有名管道等。
(一)無名管道,它具有幾個特點:
1) 管道是半雙工的,只能支援資料的單向流動;兩程序間需要通訊時需要建立起兩個管道;
2) 無名管道使用pipe()函式建立,只能用於父子程序或者兄弟程序之間;
3) 管道對於通訊的兩端程序而言,實質上是一種獨立的檔案,只存在於記憶體中;
4) 資料的讀寫操作:乙個程序向管道中寫資料,所寫的資料新增在管道緩衝區的尾部;另乙個程序在管道中緩衝區的頭部讀資料。
(二)有名管道
有名管道也是半雙工的,不過它允許沒有親緣關係的程序間進行通訊。具體點說就是,有名管道提供了乙個路徑名與之進行關聯,以fifo(先進先出)的形式存在於檔案系統中。這樣即使是不相干的程序也可以通過fifo相互通訊,只要他們能訪問已經提供的路徑。
值得注意的是,只有在管道有讀端時,往管道中寫資料才有意義。否則,向管道寫資料的程序會接收到核心發出來的sigpipe訊號;應用程式可以自定義該訊號處理函式,或者直接忽略該訊號。
二。訊號量(semophore)
訊號量是一種計數器,可以控制程序間多個執行緒或者多個程序對資源的同步訪問,它常實現為一種鎖機制。實質上,訊號量是乙個被保護的變數,並且只能通過初始化和兩個標準的原子操作(p/v)來訪問。(p,v操作也常稱為wait(s),signal(s))
三。訊號(signal)
訊號是unix系統中使用的最古老的程序間通訊的方法之一。作業系統通過訊號來通知某一程序發生了某一種預定好的事件;接收到訊號的程序可以選擇不同的方式處理該訊號,一是可以採用預設處理機制-程序中斷或退出,一是忽略該訊號,還有就是自定義該訊號的處理函式,執行相應的動作。
核心為程序生產訊號,來響應不同的事件,這些事件就是訊號源。訊號源可以是:異常,其他程序,終端的中斷(ctrl-c,ctrl+\等),作 業的控制(前台,後台程序的管理等),分配額問題(cpu超時或檔案過大等),核心通知(例如i/o就緒等),報警(計時器)。
四。訊息佇列(message queue)
訊息佇列就是訊息的乙個鍊錶,它允許乙個或者多個程序向它寫訊息,乙個或多個程序向它讀訊息。linux維護了乙個訊息佇列向量表:msgque,來表示系統中所有的訊息佇列。
訊息佇列克服了訊號傳遞資訊少,管道只能支援無格式位元組流和緩衝區受限的缺點。
五。共享記憶體(shared memory)
共享記憶體對映為一段可以被其他程序訪問的記憶體。該共享記憶體由乙個程序所建立,然後其他程序可以掛載到該共享記憶體中。共享記憶體是最快的ipc機 制,但由於linux本身不能實現對其同步控制,需要使用者程式進行併發訪問控制,因此它一般結合了其他通訊機制實現了程序間的通訊,例如訊號量。
五。套接字(socket)
socket也是一種程序間的通訊機制,不過它與其他通訊方式主要的區別是:它可以實現不同主機間的程序通訊。乙個套介面可以看做是程序間通訊的端點(endpoint),每個套介面的名字是唯一的;其他程序可以訪問,連線和進行資料通訊。
Linux程序間通訊 IPC
linux下的程序通訊手段基本上是從unix平台上的程序通訊手段繼承而來的。而對unix發展做出重大貢獻的兩大主力at t的貝爾實驗室及bsd 加州大學伯克利分校的伯克利軟體發布中心 在程序間通訊方面的側重點有所不同。前者對unix早期的程序間通訊手段進行了系統的改進和擴充,形成了 system v...
Linux程序間通訊(IPC)
程序通訊有例如以下一些目的 a 傳輸資料 乙個程序須要將它的資料傳送給還有乙個程序。傳送的資料量在乙個位元組到幾m位元組之間 b 共享資料 多個程序想要操作共享資料。乙個程序對共享資料的改動,別的程序應該立馬看到。c 通知事件 乙個程序須要向還有乙個或一組程序傳送訊息。通知它 它們 發生了某種事件 ...
Linux程序 程序間通訊IPC
一 linux程序 1 程序的記憶體映像 2 解釋 bss段 在採用段式記憶體管理的架構中,bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。資料段 在採用段式記...