程序通訊 管道通訊

2021-07-24 00:01:22 字數 2214 閱讀 7750

程序間通訊

目的

資料傳輸——乙個程序需要將它的資料傳送給另乙個程序

資源共享——多個程序之間共享同樣的資源

通知事件——乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件

程序控制——有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有操作,並能夠及時知道它的狀態改變

管道通訊

·管道是單向的、先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。

·乙個程序(寫程序)在管道的尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料

·資料被乙個程序讀出後,將被從管道中刪除,其它讀程序將不能再讀到這些資料。

·管道提供了簡單的流控制機制,程序試圖讀空管道時,程序將阻塞。同樣,管道已經滿時,程序再試圖向管道寫入資料,程序將阻塞

無名管道:

1.pipe

函式的原型:int pipe(int fds[2])

函式的引數:新建的兩個描述符fds陣列返回,fds[0]表示管道的讀取端,fds[1]表示管道的寫入端。

返 回 值:成功0,出錯-1

頭 文 件:#include

管道讀寫:

1.先建立管道pipe;

2.fork建立子程序

[html]view plain

copy

#include 

<

unistd.h

>

#include <

errno.h

>

#include <

stdio.h

>

#include <

stdlib.h

>

int main()  

else  

printf("pipe create success\n");  

close(pipe_fd[0]);  

close(pipe_fd[1]);  

}  

有名管道:

·建立管道mkfifo

·開啟管道open

·讀管道read

·寫管道write

·關閉管道close

·刪除管道unlink

2.mkfifo

函式的作用:建立有名管道

函式的原型:int mkfifo(const char * filename,mode_t mode)

引數的作用:filename:有名管道的路徑、名稱

mode:開啟管道的方式

o_nonblock:  fifo開啟的時候,費阻塞

o_rdonly:  唯讀

o_wronly:  只寫

o_rdwr:  可讀

關於:有名管道的可以用於兩個沒有任何關係的程序,

無名管道用於父子程序之間的通訊;

程序通訊 管道通訊

自己的理解,首先要區分概念 管道和管道通訊 所謂 管道 是指用於連線乙個讀程序和乙個寫程序以實現它們之間通訊的乙個共享檔案,又名pipe檔案 是一種特殊的檔案,這就意味著你可以向操作檔案一樣操作無名管道,無名管道在核心中對應的是一段特殊的記憶體空間,這段記憶體空間由作業系統進行管理,對使用者是不可見...

linux 程序通訊 管道通訊

程序通訊 1 pipe 函式的作用 建立無名管道 函式的原型 int pipe int fds 2 函式的引數 新建的兩個描述符fds陣列返回 fds 0 表示管道的讀取端 fds 1 表示管道的寫入端 返回值 成功 0 出錯 1 標頭檔案 include 2 mkfifo 函式的作用 建立有名管道...

程序間通訊 管道

include int pipe int fd 2 返回值 若成功,返回0,若出錯,返回 1經由引數fd返回兩個檔案描述符 fd 0 為讀而開啟,fd 1 為寫而開啟。fd 1 的輸出是fd 0 的輸入。else if pid 0 子程序 else else if pid 0 父程序 printf ...