linux ipc 有名管道

2021-10-23 20:54:38 字數 1764 閱讀 9852

1、有名管道是linux系統下的一種ipc通訊機制。

2、命名管道也被稱為fifo檔案,是一種特殊的檔案。

1、有名管道是相對於無名管道而產生的,我們知道無名管道只能親信程序間可以使用,而有名管道在互不相干的兩個程序之間可以實現資料交換。
int mkfifo(const char *filename, mode_t  mode)

引數:filename 有名管道檔名(包括路徑);mode 許可權(讀寫0666)

注意點:

以o_wronly開啟管道,讀阻塞

以o_rdwr開啟管道,當管道中沒有資料,讀阻塞

//當程序用open開啟有名管道用唯讀方式開啟的話,則返回的檔案描述符就代表管道的讀端

讀取輸入寫入有名管道中

#include

#include

#include

#include

#include

#include

#include

#include

#include

intmain

(int argc,

const

char

*ar**)

;if(mkfifo

("./namefifo"

,0777)!=

0)//建立有名管道

else

}int fd_fifo;

fd_fifo =

open

("./namefifo"

,o_wronly)

;//只寫方式開啟,管道描述符

if(fd_fifo <0)

int c ,rc;

while

((c =

getchar()

)>0)

}close

(fd_fifo)

;return0;

}

讀取有名管道寫入輸出中

/* 功能:實現在有名管道中讀取資料,寫到檔案中

* */

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

intmain

(int argc,

const

char

*ar**)

else

}int fd_fifo;

//此處fd_r是指有名管道,在有名管道中讀取資料,寫到檔案中

fd_fifo =

open

("./namefifo"

,o_rdonly)

;//讀方式開啟

if(fd_fifo <0)

//fifo 中迴圈讀取資料,然後寫到檔案中

int rc;

while(1

)printf

("read context : %s"

, buf)

;memset

(buf,0,

sizeof

(buf)*20

);}close

(fd_fifo)

;return0;

}

執行結果

linux ipc 無名管道

1 無名管道是linux系統下的一種ipc通訊機制。2 在linux下一切皆檔案,管道也不列外,管道也是一種特殊的檔案,在使用pipe 方法申請的時候,會得到兩個檔案描述符,乙個用於寫,乙個用於讀,這個特殊的 檔案 你可以理解為在系統的記憶體空間申請了一塊位址專門用來進行讀寫。1 主要用於程序間的通...

管道及有名管道

管道和有名管道是最早的程序間通訊機制之一,管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。認清管道和有名管道的讀寫規則是在程式中應用它們的關鍵,本文在詳細討論了管道和有名管道的通訊機制的基礎上,用例項對其讀寫規則進...

有名管道管道程式設計

linux程序和程序之間有多種通訊方式。linux程序間通訊的主要方式有 1 無名管道 2 有名管道 3 訊號 4 訊息佇列 5 共享記憶體 6 訊號量 7 套接字 管道操作是比較簡單的通訊方式,乙個程序往管道中寫入資料,另乙個程序從管道中讀出資料。管道包括無名管道和有名管道。前者只能用於父程序和子...