管道:當從乙個程序連線資料流到另乙個程序時,使用術語管道.
有名管道
無名管道(pipe)
無名管道特點:
1 只能用於具有血緣關係的程序之間
2 半雙工的通訊模式,具有固定的讀端和寫端
3 一種特殊的檔案,存在於記憶體中,可通過read、write對其操作
通常在父程序中建立管道,在建立子程序,子程序繼承了父程序開啟的檔案描述符,父子程序可通過管道進行通訊。
建立無名管道函式原型:
#include
int pipe(int fd[2]);
fd[0]讀端 fd[1]寫端
成功返回0,失敗返回-1
應用:
1 在乙個程序中使用管道:**如下
#include#include#include#include#includevoid main()
; read(fd[0],buff,127);//從管道讀資料
printf("buff=%s\n",buff);
close(fd[0]);//關閉讀端
close(fd[1]);//關閉寫端
}
程序結束管道結束
2 父子程序無名管道通訊
**:**如下:
#include#include#include#include#includevoid main()
; read(fd[0],buff,128);
printf("child read:%s\n",buff);
close(fd[0]);
}else
;printf("father input:\n");
fgets(buff,128,stdin);
write(fd[1],buff,strlen(buff));
close(fd[1]);
}exit(0);
}
3 檔案表
4把管道作為標準輸入或標準輸出
先建立管道檔案fifo,有名管道寫端覆蓋標準輸出,printf即是寫進管道
函式原型:
#include
int dup(int oldfd);
int dup2(int oldfd, int newfd);
寫端main_pipe.c**如下:
#include#include#include#include#include#includevoid main()
讀端test_pipe.c**如下:
#include#include#include#include#include#includevoid main()
; while(read(fdr,buff,127) >0)//從管道連續讀資料
close(fdr);
exit(0);
}
執行結果: Linux 程序間通訊 管道通訊
管道是 單向的 先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起,乙個程序 寫程序 在管道的尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料 資料被乙個程序讀出之後,將被從管道中刪除,其它讀程序將不能再讀到這些資料,管道提供了 簡單的流控制機制,程序試圖讀空管道時,程序將阻塞,同樣,...
Linux程序間通訊 管道通訊
1.管道簡介 管道是linux中程序間通訊的一種方式,它把乙個程式的輸出直接連線到另乙個程式的輸入。管道主要包括兩種 無名管道和有名管道 無名管道 有名管道 linux中管道通訊的一種原始方法 對無名管道的一種改進 只能用於具有親緣關係的程序之間通訊 可以使互不相關的兩個程序實現彼此通訊 單工的通訊...
Linux程序間通訊 管道
linux程序間通訊機制 1.同一主機程序間通訊機制 unix方式 有名管道fifo 無名管道pipe 訊號signal systemv方式 訊號量 訊息佇列 共享記憶體 2.網路通訊 rpc remote procedure call socket 管道管道是程序間通訊中最古老的方式,它包括無名管...