Linux程序間通訊(IPC) 匿名管道

2021-07-15 01:28:59 字數 1004 閱讀 2271



對於read讀取緩衝區為空,阻塞和非阻塞的情況

對write寫快取區滿時,阻塞和非阻塞的情況

1.建立管道,函式原型如下:

int pipe(int filedes[2]);

說明:返回值為int型別,0表示建立成功,-1表示建立失敗。引數為2個檔案描述符,fd[0]表示讀描述符,fd[1]表示寫描述符。

2.dup和dup2函式

可以使用dup和dup2函式複製描述符、

int dup(int oldfd);

說明:該函式用於複製oldfd描述符,返回乙個新的最小的描述符。

int dup(int oldfd, int newfd);

說明:該函式用oldfd描述符,覆蓋newfd描述符。

3.popen函式

file *popen(const char *command, const char* mode):

int pclose(file *stream);

說明: popen函式建立乙個子程序才執行shell,而shell又建立乙個子程序來執行command。

功能:該函式用於和shell命令通訊。

注意:popen使用的是塊快取,因此,一般呼叫程序向管道寫入資料,stdio庫不會立即將資料傳遞給另一端,除非手動呼叫fflush和fclose。因此對於從管道中讀資料,如果對端正在操作stdio,那麼命令程序寫的資料不會立即傳送,這種對於呼叫程序沒有辦法立即讀取資料。

乙個父子程序通過匿名管道進行通訊的例子。    

#include #include int main(int argc, char* argv)

; char str = "hello world!";

int ret = pipe(fd);

if(ret ==-1)

pid_t pid = fork();

switch(pid)

return 0;

}

輸出結果如下:

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段屬於靜態記憶體分配。資料段 在採用段式記...