Linux 管道通訊

2021-05-28 02:54:23 字數 1116 閱讀 4804

一、定義

管道是單向的、先進先出的。它將乙個程式的輸入和另乙個程式的輸出連線起來。資料被乙個程序讀出後,將被從管道中刪除。分為無名和有名管道兩種。前者用於父程序和子程序間的通訊,後者用於同一系統的兩個程序間通訊。

二、無名管道

int  pipe(int fd[2]);

其中,fd[0]用於讀管道,fd[1]用於寫管道。若成功則返回零,否則返回-1,錯誤原因存於errno中。

三、有名管道:fifo

int mkfifo(const char* pathname,mode_t mode)

open時使用o_nonblock,訪問要求無法滿足則立即出錯返回。erron是enxio。

例子:

fread.c                          //讀檔案

#include#include#define fifo "myfifo"

main()

fd=open(fifo,o_rdonly|o_nonblock); //設定非阻塞開啟,否則當沒有輸入時,會阻塞在read函式

int num;

while(1)

printf("read %d in fifo , it's %s",num,buff);

sleep(1);

}}fwrite.c //寫檔案

#include#include#include#define fifo "myfifo"

main()

fd=open(fifo,o_wronly);

int num;

num=write(fd,buff,strlen(buff));

printf("%d char is written! it's %s\n",num,buff);

}

4、管道關閉:用close()關閉相應的檔案描述符即可。

Linux管道通訊

現在在linux 中使用較多的程序間通訊方式主要有以下幾種。1 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。2 訊號 signal 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊...

linux 管道通訊

無名管道 1 管道是半雙工的,只能支援資料的單向流動 兩程序間需要通訊時需要建立起兩個管道 2 使用無名管道通訊的程序必須擁有公共祖先程序 pipe 1 標頭檔案 include 2 定義函式 int pipe int filedes 2 3 函式說明 pipe 會建立管道,並將檔案描述詞由引數fi...

Linux 管道通訊

一 通訊的意義 1 傳輸資料 程序之間的通訊 2 共享資源 不同程序之間共享同一資源 3 事件通知 乙個程序向另乙個或另一組程序傳送訊息通知 4 程序控制 如debug程序等需要完全控制另乙個程序的執行,即能攔截程序操作並知曉其狀態 二 通訊的方式 1 無名管道 pipe 使用檔案操作函式 read...