LINUX程序間通訊(IPC) 管道

2021-10-08 22:09:58 字數 1431 閱讀 9048

管道,通常指無名管道,是unix系統ipc最古老的形式

1、#include // 標頭檔案

2、int fd[2]; // fd[0]:讀端 / fd[1]:寫端

3、 pipe(fd) //建立管道

4、傳輸資訊時,傳送端先關閉讀端fd[0],再進行寫操作

接收端反之,close(fd[1]); read( );

#include

#include

#include

intmain()

pid =

fork()

;//建立程序

if(pid<0)

else

if(pid >0)

//父程序

else

return0;

}

建立命名管道時,可能會存在管道名已存在造成建立失敗退出現象

1、mkfifo() 建立命名管道

2、perror()函式 顯示錯誤原因到標準輸出

//int mkfifo(const char *pathname,mode_t mode)

//mode與open函式中的mode相同

intmain()

return0;

}

當open乙個fifo時,是否設定非阻塞標(o_nonblock)有區別:

1、若沒有指定,唯讀open(o_rdonly)要阻塞到某個其他的程序為寫(write)而開啟此fifo。反之只寫開啟(o_wronly),要等到另乙個檔案唯讀開啟。

(eg:-------將乙個只寫開啟,等待另乙個write執行時,實現資訊傳輸)

2、若指定o_nonblock,則唯讀open立即返回,而只寫open將出錯返回-1

<>

fifo_read.c

#include

#include

#include

#include

#include

//perror

#include

intmain()

int fd =

open

("./guandao"

,o_rdonly)

;//以唯讀開啟

printf

("open success\n");

return0;

}

fifo_write.c

int

main()

在兩個終端裡用 gcc 分別編譯執行上面兩個檔案,只執行其中乙個會阻塞等待,當另乙個執行時,兩個程序才會列印出相應內容。

如果通過fifo,兩個程序傳遞資訊,通過分別 read(fd,buf,size)及write(fd,buf,size)進行《參考收藏博文demo**》

程序間通訊 IPC 管道

管道是unix ipc最古老的形式,所有unix系統都提供此通訊機制。管道的兩種限制 1 半雙工,資料單方向流動。2只能用於具有公共祖先的程序之間。需要雙方通訊時,需要建立起兩個管道。例外 流管道沒有限制1,fifo和命名管道沒有限制2。管道是乙個檔案,但它不屬於某種檔案系統,而是 單獨構成一種檔案...

程序間通訊(IPC) 管道

二 fifo 命名管道 參考管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞,呼叫pipe系統函式即可建立乙個管理。有如下性質 1.其本質是乙個偽檔案 實為核心緩衝區 所謂的偽檔案是指不佔磁碟空間大小的檔案,linux的檔案除了 l d,其它的s,b,c,p等都是偽檔案。2.由...

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

對於read讀取緩衝區為空,阻塞和非阻塞的情況 對write寫快取區滿時,阻塞和非阻塞的情況 1.建立管道,函式原型如下 int pipe int filedes 2 說明 返回值為int型別,0表示建立成功,1表示建立失敗。引數為2個檔案描述符,fd 0 表示讀描述符,fd 1 表示寫描述符。2....