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