Linux程序間通訊之無名管道

2021-08-29 12:32:24 字數 1433 閱讀 8949

在學習了linux程序間通訊之後,打算對所學的知識進行乙個系統的整理,形成乙個自己的系列,方便以後的複習與再次學習。第一次寫部落格,才疏學淺,有錯誤的地方請大佬們指正!

管道的實現原理:

管道檔案是乙個特殊的檔案,是由佇列實現的

如何建立管道?

使用pipe()函式建立管道

pipe()函式:

標頭檔案unistd.h

功能建立無名管道

函式形式

int pipe(fd)

引數檔案描述符---- fd[0] :讀端 和 fd[1] :寫端

返回值成功返回:0 失敗返回:-1––

pipe()函式使用注意:

無名管道是建立在記憶體中,程序結束,空間釋放,無名管道就不存在了

無名管道中的東西,讀寫完成後就刪除了

如果無名管道中沒有可以讀寫的東西,則會阻塞

無名管道的缺點:

不能實現不是父子(親緣關係)程序間的通訊

程式例子:

在同乙個程序中實現管道

int main();

char restr[max] = ;

ret = pipe(fd); //建立管道

if(ret < 0)

printf("creat pipe success\n");

printf("fd[0] = %d,fd[1] = %d\n",fd[0],fd[1]);

write(fd[1],wrstr,sizeof(wrstr)); //開始寫

read(fd[0],restr,128); //開始讀

printf("restr:%s\n",restr); //列印讀的結果

close fd[0];

close fd[1];

return 0;

}

執行結果:

在不同的程序(父子程序)中實現無名管道通訊:

int main();

char restr[max] = ;

ret = pipe(fd);

if(ret < 0)

printf("creat pipe success\n");

printf("fd[0] = %d,fd[1] = %d\n",fd[0],fd[1]);

pid = fork(); //建立父子程序

if(pid < 0)

if(pid > 0)

if(pid == 0)

return 0;

}

執行結果:

Linux下程序通訊之 無名管道

程序通訊 程序與程序間的資料交換,稱為程序通訊。程序通訊的方式有 共享記憶體 訊號量 管道 訊息佇列 socket等等。管道 是一種基於檔案描述符的通訊方式,可以呼叫read write和close等操作檔案的介面來操作。它是基於檔案描述符的通訊方式,它是半雙工模式。分為有名管道和無名管道。無名管道...

QProcess 程序通訊之無名管道

程序間通訊 ipc 方式包括 管道,fifo,訊號。這裡只提下無名管道,用於有親緣關係的程序之間。有名管道可以用在沒有親緣關係的程序之間。qprocess,底層使用的就是無名管道。做了乙個小demo,畢設有一塊要用到。由於底層封裝了win linux mac不同平台的無名管道實現,避免了無謂的跨平台...

程序間通訊 無名管道

在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...