Linux程序間通訊之管道

2021-10-17 08:03:35 字數 2177 閱讀 5054

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

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

linux下ipc機制的分類

​ 管道、訊號、共享記憶體、訊息佇列、訊號量、套接字

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

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

歷史上的管道通常是指半雙工管道,如果需要雙向通訊,則建立兩個管道

3.2 管道:有兩種形式,命令列和非命令列

程式設計模型:程序a建立管道(mkfifo) -> 程序a寫開啟管道(open) -> 程序b讀開啟管道(open) -> 程序a開始往管道裡寫資料(write) ->

程序b從管道中讀資料(read) -> 程序a關閉管道(close) -> 程序b關閉管道(close) -> 刪除管道(unlink)

有名管道(例項):

server:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define pipewritename "/home/qgm/pipewriteserver"

#define pipereadname "/home/qgm/pipereadserver"

void

*readfun

(void

*arg)

// 寫開啟管道

int fd =

open

(pipereadname, o_rdwr);if

(-1== fd)

int i =0;

for(i =

0; i <

100000

; i++

)// 關閉管道

close

(fd)

;return

(void*)

0;}void

*writefun

(void

*arg)

// 寫開啟管道

int fd =

open

(pipewritename, o_rdwr);if

(-1== fd)

int i =0;

for(i =

0; i <

100000

; i++

)// 關閉管道

close

(fd)

;return

(void*)

0;}int

main()

client:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define pipewritename "/home/qgm/pipewriteserver"

#define pipereadname "/home/qgm/pipereadserver"

void

*readfun

(void

*arg)

int i =0;

for(i =

0; i <

100000

; i++

)// 關閉管道

close

(fd)

;return

(void*)

0;}void

*writefun

(void

*arg)

int i =0;

for(i =

0; i <

100000

; i++

)// 關閉管道

close

(fd)

;return

(void*)

0;}int

main()

注意:管道的資料長度為64k,所以使用的時候需要注意

linux程序間通訊之管道通訊

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

linux程序間通訊之管道

下面幾節,將分別溫習下linux程序進通訊的幾種機制1 管道 管道是比較古老的程序間的通訊方式。主要有有名管道和無名管道兩種。2 無名管道 它的特點就是 1 只能使用在具有親緣關係的程序之間的通訊 父子程序或者兄弟程序之間 因為只有具有親緣關係的程序才能繼承其建立的檔案描述符。2 是乙個半雙工的通訊...

Linux程序間通訊之管道

管道,你可以把它想成一根資料線,連線了兩個程序,使他們可以互相通訊。更嚴謹來說,它是乙個檔案或者一塊共享區,乙個程序往裡面寫資料,另乙個程序從裡面拿資料,以此種方式完成程序間通訊。管道是unix系統ipc最古老的形式,所有的unix系統都提供此種通訊機制 unix系統ipc是各種程序通訊方式的統稱 ...