程序通訊之管道通訊

2021-09-19 09:03:36 字數 1540 閱讀 9033

管道概念

它把乙個程序的輸出和另乙個程序的輸入連線在一起。乙個程序(寫程序)在管道尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料。

分類

1.無名管道:用於父程序和子程序之間的通訊

2.命名管道:用於執行同一系統中的任意兩個程序間的通訊

無名管道

由pipe()函式建立:

原型:int pipe(int filedis[2]);

當乙個管道建立時,它會建立兩個檔案描述符:filedis[0]用於讀管道,filedis[1]用於寫管道。出錯則返回-1;

#include

#include

#include

#include

int main()

else

close(pipe_fd[0]);

close(pipe_fd[1]);

return 0;

}

無名管道的通訊通常先建立乙個管道,然後用fork()函式建立乙個子程序,該子程序會繼承父程序所建立的管道描述符

注意:必須在呼叫fork()前呼叫pipe(),否則子程序不會繼承父程序的檔案描述符

#include #include#includeint main()

; char write_buf[100]=;

int pipefd[2];

ret=pipe(pipefd);//建立無名管道

if(ret <0)

pid=fork();

if(pid <0 )

if(pid == 0)//子程序進行管道檔案的讀操作

else if (pid>0)//父程序進行管道檔案的寫操作

return 0;

}

命名管道建立

int mkfifo(const char *pathname, mode_t mode);

pathname: fifo檔名

mode:屬性(同檔案操作)

一旦建立了乙個fifo,就可用open開啟它,一般的檔案訪問函式(close、read、write等)都可用於fifo。

對namefifo檔案進行寫操作

#include #include #include #include #include int main()

fd=open("/home/2019/0420/namefifo",o_wronly);

if(fd <0)

while(1)

return 0;

}

對namefifo檔案進行讀操作

#include #include #include #include #include #include int main()

while(1)

return 0;

}

程序通訊之管道通訊

管道通訊有乙個特點 通訊是半雙工的,即管道的一端只能讀或者只能寫 管道通訊可以分為 匿名管道通訊和命名管道通訊兩種 1.匿名管道通訊 適合用於父子程序間的通訊 include include include 匿名管道通訊,本機父子程序通訊方式 int main else waitpid pid,nu...

linux程序間通訊之管道通訊

一 命名管道通訊 管道通訊分為 無名管道和有名管道 無名管道是用於父子孫程序,之間有血緣關係 有名管道 用於任意兩個程序 無名管道 1 建立 int pipe int filedis 2 它會建立兩個檔案描述符 filedis 0 用於讀管道 filedis 1 用於寫管道 通常先建立乙個管道,再通...

linux程序通訊之管道

管道 可分為普通管道和命名管道。普通管道用於有親緣關係的程序間的通訊 父子程序 命名管道,通過給管道命名的方式,使得管道變成檔案系統中的管道檔案,從而允許無親緣關係的程序間通過訪問管道檔案進行通訊。管道是單向的,一端只能用於輸入,另一端只能用於輸出。管道是fifo的,即先進先出的,向管道中寫入的資料...