linux上課隨筆 程序間通訊 管道

2021-07-24 22:33:02 字數 1562 閱讀 1858

管道:當從乙個程序連線資料流到另乙個程序時,使用術語管道.

有名管道

無名管道(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 管道管道是程序間通訊中最古老的方式,它包括無名管...