Linux 管道通訊

2021-07-23 23:29:14 字數 3502 閱讀 5543

一、通訊的意義

1、傳輸資料:程序之間的通訊

2、共享資源:不同程序之間共享同一資源

3、事件通知:乙個程序向另乙個或另一組程序傳送訊息通知

4、程序控制:如debug程序等需要完全控制另乙個程序的執行,即能攔截程序操作並知曉其狀態

二、通訊的方式

1、無名管道:pipe (使用檔案操作函式: read, write, close),用於父子程序間的通訊2、有名管道:fifo (使用檔案操作函式: open, read, write, close),用於任意兩個程序之間的通訊3、訊號:signal

4、訊息佇列

5、記憶體共享

6、訊號量:semaphore

7、套接字:socket

三、管道通訊的特點

1、管道通訊方向:有固定的讀端和寫端

2、資料不保留:當資料被程序從管道讀出後,管道中的資料就不存在了

3、程序阻塞:程序在讀或寫資料時程序會阻塞(相當於等待完成管道操作)

4、管道容量固定:64kb (/include/linux/pipe_fs_i.h)

5、管道資料:資料儲存於檔案中。也就是說操作管道相當於操作檔案(可用函式open,read,write,close)

四、函式學習

1、無名管道:pipe

1)函式原型

int pipe(int pipefd[2]);

2)所屬標頭檔案

#include

3)返回值

成功: 0

失敗: -1

4)引數說明

pipefd:儲存兩個檔案描述符

pipefd[0]: 指向管道讀端

pipefd[1]: 指向管道寫端

* 無名管道案例(無名管道用於父子程序之間的通訊)

2、有名管道1)建立有名管道:mkfifo

a)函式原型

int mkfifo(const char *pathname, mode_t mode);

b)所屬標頭檔案

#include

#include

c)返回值

成功: 0

失敗: -1

d)引數說明

pathname: 要建立的fifo檔案的名字(含路徑)

mode: 建立的fifo檔案的訪問許可權

2)刪除有名管道:unlink

a)函式原型

int unlink(const char *pathname);

b)所屬標頭檔案

#include

c)返回值

成功: 0

失敗: -1

d)引數說明

pathname: 要刪除的檔名

* 案例 - 1: 寫管道

#include #include #include #include void main()

* 案例 - 2: 讀管道

#include #include #include #include void main()

* 案例 - 1 和 案例 - 2 執行結果:

* unlink的功能為刪除管道, 也就是刪除有名管道檔案:fifo_file(檔名任意取)

Linux 管道通訊

一 定義 管道是單向的 先進先出的。它將乙個程式的輸入和另乙個程式的輸出連線起來。資料被乙個程序讀出後,將被從管道中刪除。分為無名和有名管道兩種。前者用於父程序和子程序間的通訊,後者用於同一系統的兩個程序間通訊。二 無名管道 int pipe int fd 2 其中,fd 0 用於讀管道,fd 1 ...

Linux管道通訊

現在在linux 中使用較多的程序間通訊方式主要有以下幾種。1 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。2 訊號 signal 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊...

linux 管道通訊

無名管道 1 管道是半雙工的,只能支援資料的單向流動 兩程序間需要通訊時需要建立起兩個管道 2 使用無名管道通訊的程序必須擁有公共祖先程序 pipe 1 標頭檔案 include 2 定義函式 int pipe int filedes 2 3 函式說明 pipe 會建立管道,並將檔案描述詞由引數fi...