管道概念
它把乙個程序的輸出和另乙個程序的輸入連線在一起。乙個程序(寫程序)在管道尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料。
分類
1.無名管道:用於父程序和子程序之間的通訊
2.命名管道:用於執行同一系統中的任意兩個程序間的通訊
無名管道
由pipe()函式建立:
原型:int pipe(int filedis[2]);
當乙個管道建立時,它會建立兩個檔案描述符:filedis[0]用於讀管道,filedis[1]用於寫管道。出錯則返回-1;
#include無名管道的通訊通常先建立乙個管道,然後用fork()函式建立乙個子程序,該子程序會繼承父程序所建立的管道描述符#include
#include
#include
int main()
else
close(pipe_fd[0]);
close(pipe_fd[1]);
return 0;
}
注意:必須在呼叫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檔案進行寫操作
對namefifo檔案進行讀操作#include #include #include #include #include int main()
fd=open("/home/2019/0420/namefifo",o_wronly);
if(fd <0)
while(1)
return 0;
}
#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的,即先進先出的,向管道中寫入的資料...