程序間通訊 之 管道

2021-06-23 05:34:33 字數 1531 閱讀 4710

一 無名管道:

特點: 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。

(1)無名管道的建立

int pipe(int pipefd

引數:pipefd  陣列的首位址 

返回值:

成功返回0,失敗返回-1 

注意:無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd[0]:讀管道 fd[1]:寫管道

思考:為什麼無名管道只能用於親緣關係間程序通訊?

因為只有具有親緣關係的程序存在資料拷貝 [拷貝檔案描述符]

二。有名管道

特點:

(1)任意程序間通訊 

(2)檔案系統中存在檔名

<1>建立有名管道檔案 

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

引數:@pathname  檔名 

@mode      指定的許可權 

返回值:

成功返回0,失敗返回-1 

<2>開啟有名管道檔案

open 

注意:乙個程序以唯讀方式開啟管道檔案,則阻塞,直到另乙個程序以寫的方式開啟管道檔案 

乙個程序以只寫方式開啟管道檔案,則阻塞,直到另乙個程序以讀的方式開啟管道檔案 

<3>讀寫管道 

read / write 

負責從管道中讀

#include int read_fifo(int fd)

return 0;

}//./a.out fifoname

int main(int argc, const char *argv)

//建立有名管道

if(mkfifo(argv[1],0666) < 0 && errno != eexist)

fd = open(argv[1],o_rdonly);

if(fd < 0)

printf("open success for read!\n");

read_fifo(fd);

return 0;

}

負責向管道中寫 

#include int write_fifo(int fd)

return 0;

}//./a.out fifoname

int main(int argc, const char *argv)

//建立有名管道

if(mkfifo(argv[1],0666) < 0 && errno != eexist)

fd = open(argv[1],o_wronly);

if(fd < 0)

write_fifo(fd);

return 0;

}

程序間通訊之管道

我們將乙個程序到另乙個程序的資料流稱為管道,它是程序間通訊最古老的方式。管道分為兩種 匿名管道與命名管道。匿名管道 顧名思義,所謂的匿名管道自然就是沒有名字的管道,這種管道通常用於有親緣關係的程序間的通訊。匿名管道通常由pipe函式來建立,當乙個程序建立了乙個匿名管道後,它們的模型就是這樣的 可以看...

程序間通訊之管道

既然要介紹程序間通訊,首先來看看什麼是程序間通訊 2.程序間通訊的目的 1 資料傳輸 乙個程序需要將它的資料傳送給另乙個人程序 2 資源共享 多個程序共享同樣的資源 3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它 它們 發生了某種事件 4 程序控制 有些程序希望完全控制某些程序的執行,...

程序間通訊之管道

程序間通訊的本質就是讓兩個毫不相干的程序去看到同乙份資源 作業系統所提供的 一 管道的定義 管道是比較古老的程序間通訊的形式,把從乙個程序連線到另乙個程序的乙個資料流稱為乙個 管道 二 管道的兩種方式 1 匿名管道 匿名管道是一種最基礎的ipc機制,由pipe函式建立 include int pip...