二、程序間通訊 1.
管道:管道用於相關的程序
(特別是父子程序的
)間的通訊。使用
read
和write
進行讀寫操作。
#include
intpipe(int file_descriptor[2]); //建立管道
file_desciptor[0]為讀取端,file_desciptor[1]為寫入端。
例程:#include
#include
#include
intmain()else
if (pid !=0)
}3. fifo 1.
建立 程式中建立
fifo:
#include
#include
int mkfifo(const char *filename,mode_t mode);
2.開啟
程式只能以
o_rdonly
、o_wronly
和o_nonblock
開啟。不能讀寫開啟。單向通道。 如:
open(const char *path,o_rdonly);
//open呼叫將阻塞,除非有個程序以寫方式開啟同乙個
fifo
,否則不會返回。
open(const char *path,o_rdonly |o_nonblock); //
即使沒有其他程序以寫方式開啟
fifo
,這個open
呼叫也將成功並立刻返回
open(constchar *path,o_wronly);
// open呼叫將阻塞,除非有個程序以讀方式開啟同乙個
fifo
為止。
open(cosnt char *path,o_wronly | o_nonbolock);
//這個函式呼叫總是立即返回,但如果沒有程序以讀方式開啟
fifo
檔案,open
呼叫將返回乙個錯誤
-1並且
fifo
也不會被開啟。
阻塞的時候,
read
要等到有資料讀才解除阻塞;非阻塞沒有資料讀時返回0;
阻塞的時候,
write
等到有讀取程序啟動後才繼續執行。
fifo
檔案的長度是乙個很重要的因素,系統對任一時間乙個
fifo
檔案裡能儲存的資料長度有限制最多個數為
pipe_buf
定義在limits.h。
例程: 見《
linux
程式設計(第三版)》
451頁
Linux程序間通訊程式設計
3.訊息佇列 訊息佇列就是乙個訊息的鍊錶.可以把訊息看作乙個記錄,具有特定的格式 程序可以向中按照一定的規則新增新訊息 另一些程序則可以從訊息佇列中讀走訊息 優點 比訊號傳送的資訊量多 能傳送有格式的位元組流 目前主要有兩種型別的訊息佇列 1.系統 v訊息佇列是隨核心持續的,只有在核心重起或者人工刪...
Linux 網路程式設計筆記(3) 程序間通訊
資料傳輸 資源共享 通知時間。程序控制。乙個程序完全控制另乙個程序的執行,如攔截另乙個程序的所有陷入和異常,並能夠幾時知道它的狀態改變。檔案檔案鎖 管道 pipe 和有名管道 fifo 訊號訊息佇列 共享記憶體 訊號量互斥量 條件變數 讀寫鎖套接字 共享檔案系統 共享核心中的資訊 共享記憶體區 隨程...
Linux學習筆記(程序間通訊)
ipc 程序間通訊 linux下的多個程序間的通訊機制叫做ipc,它是多個程序之間進行相互溝通的一種方法。通過程序間通訊可以實現不同程序之間傳播和交換資訊。程序間通訊的目的 1.資料傳輸 2.資源共享 3.乙個程序需要向另乙個或一組程序傳送訊息,通知它或它們發生了某種事件 4.程序控制 程序間通訊的...