Linux下程序間通訊 管道通訊

2021-07-23 23:18:03 字數 1528 閱讀 5518

1.程序間通訊 (ipc ) inter-process communication

比較好理解概念的就是程序間通訊就是在不同程序之間傳播或交換資訊。

2,linux下ipc機制的分類:管道、訊號、共享記憶體、訊息佇列、訊號量、套接字

我今天主要想講的是管道通訊

管道通訊特點

1)管道是最古老的ipc,但目前很少使用

2)以檔案做互動的媒介,管道分為有名管道和無名管道

3)歷史上的管道通常是指半雙工管道

1.無名管道的建立:

pipe   建立無名管道

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

函式引數:filedes[0] 表示管道讀取端;filedes[1] 表示管道寫入端

返回值:成功:返回0;失敗:返回-1;

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

else

printf("pipe create success\n");

close(pipe_fd[0]);

close(pipe_fd[1]);

}

2.建立有名管道

mkfifo

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

函式作用:filename 有名管道的名稱,

mode:有名管道的開啟方式(o_nonblcok開啟fifo檔案讀取的時候會立刻返回,o_rdonly唯讀,o_wronly只寫,o_rdwr讀寫)

返回值:成功:0;失敗 -1

任意兩個程序之間管道之間的讀取**,

#include #include #include #include #include #include #include #define fifo "/tmp/myfifo"

main(int argc,char** argv)

while(1)

printf("read %s from fifo\n",buf_r);

sleep(1);

} pause(); /*暫停,等待訊號*/

unlink(fifo); //刪除檔案

}

#include #include #include #include #include #include #include #define fifo_server "/tmp/myfifo"

main(int argc,char** argv)

strcpy(w_buf,argv[1]);

/* 向管道寫入資料 */

if((nwrite=write(fd,w_buf,100))==-1)

else

printf("write %s to the fifo\n",w_buf);

}

任意兩個程序之間管道之間的寫入**,這兩個**同時執行的時候,當寫入程式寫入的時候,另乙個就會接收。

Linux下程序間通訊 管道

管道是unix系統ipc的最古老的形式,所有的unix系統都提供此種通訊機制。管道的實質是乙個核心緩衝區,程序以先進 先出 fifo,first in first out 的方式從緩衝區訪問資料 管道一端的程序順序地將程序資料寫入緩衝區,另一端的程序則順 序地讀取資料,該緩衝區可以看做乙個迴圈佇列,...

Linux 程序間通訊 管道通訊

管道是 單向的 先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起,乙個程序 寫程序 在管道的尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料 資料被乙個程序讀出之後,將被從管道中刪除,其它讀程序將不能再讀到這些資料,管道提供了 簡單的流控制機制,程序試圖讀空管道時,程序將阻塞,同樣,...

Linux程序間通訊 管道通訊

1.管道簡介 管道是linux中程序間通訊的一種方式,它把乙個程式的輸出直接連線到另乙個程式的輸入。管道主要包括兩種 無名管道和有名管道 無名管道 有名管道 linux中管道通訊的一種原始方法 對無名管道的一種改進 只能用於具有親緣關係的程序之間通訊 可以使互不相關的兩個程序實現彼此通訊 單工的通訊...