Linux程式設計筆記 程序間通訊

2021-06-05 20:10:38 字數 1348 閱讀 2644

二、程序間通訊 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.程序控制 程序間通訊的...