linux 程序間通訊 pipe

2021-07-09 12:24:04 字數 1019 閱讀 5634

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...