一 無名管道:
特點: 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。
(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...