pipe 是有親屬關係的程序之間通訊的經典方法
int pipe(int fd[2]); //建立管道的函式 成功返回0 出錯返回-1
引數fd[2] 作為返回檔案描述符的容器 fd[0]為讀開啟 fd[1]為寫開啟
可以fork子程序 繼承檔案描述符實現通訊 可以fork多個子程序進行通訊但是你要有足夠的精力管理他們以至於 不會發生混亂所以這樣做是不可取的
fpathconf和fpathconf可以確定管道的size
非阻塞管道, fcntl函式設定o_nonblock標誌
#include
#include
#include
#include
#include
#include
void err(char *name, int err_num)
int main()
int pipe_size = fpathconf(fd[1], _pc_pipe_buf);
printf("size of pipe : %d\n", pipe_size);
pid = fork();
if(pid < 0)
else if(pid > 0)
close(fd[1]);
waitpid(pid ,0,0);
}else if(pid == 0)
write(stdout_fileno,buf, strlen(buf));
write(stdout_fileno,"\n", strlen("\n"));
}return 0;
}四種特殊情況
1> 讀端關閉 寫管道 發出sigpipe訊號 若忽略該訊號或捕捉該訊號並未從其處理程式返回 write返回-1 errno設定為epipe
2> 寫端關閉 讀管道 如果有資料則會把資料讀出來 如果沒有資料則相當於讀空管道
3> 讀空管道 阻塞 非阻塞返回 -1
4> 寫滿管道 阻塞 非阻塞返回-1
Linux 程序間通訊方式 pipe()函式
linux 程序間通訊方式有以下幾種 1 管道 pipe 和有名管道 fifo 2 訊息佇列 3 共享記憶體 4 訊號量 5 訊號 signal 6 套接字 sicket 在這裡我們看一下第一種 管道 pipe 有名管道 fifo 見其它文章。eg 我們以前學的命令 cat file grep ab...
Linux程序間通訊之管道 pipe
管道是unix系統ipc的最古老的形式,並且所有unix系統都提供此種通訊機制。但是管道存在如下特點 管道是半雙工的。管道只能用在具有公共祖先的程序之間。管道的建立 管道是通過呼叫pipe函式建立的 include int pipe int filedes 2 引數filedes 2 是兩個檔案描述...
Linux程序間通訊 管道 pipe
程序是乙個獨立的資源管理單元,不同程序間的資源是獨立的,不能在乙個程序中訪問另乙個程序的使用者空間和記憶體空間。但是,程序不是孤立的,不同程序之間需要資訊的互動和狀態的傳遞,因此需要程序間資料的傳遞 同步和非同步的機制。當然,這些機制不能由哪乙個程序進行直接管理,只能由作業系統來完成其管理和維護,l...