本人最近學習了程序間通訊,並看了一些博文,然後結合書籍根據自己的理解寫了這篇文章。
函式原型:經由引數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 管道 一種兩個程序間進行單向通訊的機制,半雙工的通訊方式。資料只能單方向流動,而且只能在具有親緣關係 父子程序 兄弟程序 的程序間使用。從通訊的雙方資訊互動的方式分三種基本模式 單工通訊 單向通訊 只有乙個方向的通訊而沒有反方向的互動 資訊流是單方向的 傳送端和接收端的身份...