程序間通訊的方式簡單解析 管道

2021-08-28 19:45:14 字數 2188 閱讀 6210

本人最近學習了程序間通訊,並看了一些博文,然後結合書籍根據自己的理解寫了這篇文章。

函式原型:經由引數fd返回兩個檔案描述符:fd[0]為讀,fd[1]為寫。fd[1]的輸出是fd[0]的輸入。

#include

intpipe

(int fd[2]

);

侷限性:

(1)歷史上,它是半雙工的,某些系統提供全雙工管道,即其可移植性並不好。

(2)它只能在具有公共祖先的兩個程序間使用。

示例**:

#include

#include

#include

#include

intmain()

pid_t pid =

fork()

;//建立子程序

if(pid <0)

else

if(pid ==0)

}else

printf

("message:%s. length:%d.\n"

, recv, length);}

if(waitpid

(pid,

null,0

)<0)

}return0;

}

執行結果:

函式原型:

#include

intmkfifo

(const

char

*path, mode_t mode)

;int

mkfifoat

(int fd,

const

char

*path, mode_t mode)

;

引數資訊:

(1)引數fd為檔案描述符。

(2)引數path為路徑名。

(3)mode引數指定檔案的訪問許可權位。

fifo的用途:

(1)shell命令使用fifo將資料從一條管道傳送到另一條時,無需建立中間臨時檔案。

(2)c/s應用程式中,fifo用作匯聚點,在二者之間傳遞資料。

示例**:fifo-read.c

#include

#include

#include

#include

#include

#include

#define _path_ "/tmp/file.fifo"

intmain()

char recv[bufsiz]

;while(1

)printf

("message:%-20s. length:%d\n"

, recv, ret);}

close

(fd)

;//關閉檔案

return0;

}

執行結果:

;//以只寫的許可權開啟檔案

if(fd <0)

char buf[bufsiz]

;while(1

)if(strstr

(buf,

"quit")!=

0)}close

(fd)

;//關閉檔案

unlink

(_path_)

;//刪除管道檔案

return0;

}執行結果:

程序間通訊方式 管道通訊

c語言中的管道通訊是通過在核心中開闢一塊空間,使用者通過檔案io介面來訪問這塊空空間實現通訊目的。管道的優點是直接訪問記憶體,通訊速度較快。缺點是一方面管道屬於半雙工的通訊,即同一程序只能讀或者寫,無法同時讀寫同一管道。另一方面管道中的資料只能讀一次,無法重複讀取。程序通過檔案io來操作管道,但是不...

程序間通訊方式 管道

1.管道的建立 管道是由呼叫pipe函式來建立 include int pipe int fd 2 返回 成功返回0,出錯返回 1 是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係 父子程序 的程序間使用。2.有名管道和無名管道的區別 有名管道 可以在任意兩個程序之間,有名的名字存在...

程序間通訊方式介紹 管道

1.程序間通訊的方式 1 管道 一種兩個程序間進行單向通訊的機制,半雙工的通訊方式。資料只能單方向流動,而且只能在具有親緣關係 父子程序 兄弟程序 的程序間使用。從通訊的雙方資訊互動的方式分三種基本模式 單工通訊 單向通訊 只有乙個方向的通訊而沒有反方向的互動 資訊流是單方向的 傳送端和接收端的身份...