c語言中的管道通訊是通過在核心中開闢一塊空間,使用者通過檔案io介面來訪問這塊空空間實現通訊目的。管道的優點是直接訪問記憶體,通訊速度較快。缺點是一方面管道屬於半雙工的通訊,即同一程序只能讀或者寫,無法同時讀寫同一管道。另一方面管道中的資料只能讀一次,無法重複讀取。程序通過檔案io來操作管道,但是不能使用lseek()操作。管道分為有名管道(fifo)和無名管道(pipe)
#include
#include
#include
intmain()
//建立程序
int pid =
fork()
;if(-
1== pid)
elseif(
0== pid)
else
;read
(fd[0]
, buf,10)
;printf
("%s\n"
, buf);}
//等待程式結果輸出完畢退出程式
sleep(2
);return0;
}
管道在預設情況(沒有設定o_nonblock)下屬於阻塞讀寫
注意:1)所有寫端都關閉,僅有讀端描述符時,讀端讀取資料,read返回0
2)所有讀端都關閉,寫端寫入資料,程序將收到sigpipe訊號,程式崩潰
3)寫端不再寫入資料,讀端將管道資料讀取完畢後再讀取會阻塞
4)讀端不再讀取資料,寫端還在寫入資料到管道,管道空間滿後,繼續寫入資料會阻塞
fifowrite.c
#include
#include
#include
#include
#include
#include
#define fifo_path "/home/abing/test.fifo"
intmain()
//開啟管道
int fd =
open
(fifo_path, o_wronly);if
(-1== fd)
//寫入資料
write
(fd,
"hello!",7
);close
(fd)
;return0;
}
fiforead.c
#include
#include
#include
#include
#include
#include
#define fifo_path "/home/abing/test.fifo"
intmain()
//讀取資料
char buf[10]
=;read
(fd, buf,7)
;printf
("%s\n"
, buf)
;close
(fd)
;return0;
}
程序間通訊方式 管道
1.管道的建立 管道是由呼叫pipe函式來建立 include int pipe int fd 2 返回 成功返回0,出錯返回 1 是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係 父子程序 的程序間使用。2.有名管道和無名管道的區別 有名管道 可以在任意兩個程序之間,有名的名字存在...
程序間的通訊方式之管道通訊
一 管道通訊的特點 1.管道是單向的,先進先出的。2.乙個程序在管道尾部寫入資料,另乙個程序在管道頭部讀取資料。因此管道通訊是半雙工的。3.管道提供了簡單的流控制機制,當程序試圖讀空管道時,程序將阻塞。當管道已經寫滿時,程序再試圖向管道寫入資料,程序將阻塞。4.資料被程序讀出,將從管道中刪除 二 管...
程序間通訊方式介紹 管道
1.程序間通訊的方式 1 管道 一種兩個程序間進行單向通訊的機制,半雙工的通訊方式。資料只能單方向流動,而且只能在具有親緣關係 父子程序 兄弟程序 的程序間使用。從通訊的雙方資訊互動的方式分三種基本模式 單工通訊 單向通訊 只有乙個方向的通訊而沒有反方向的互動 資訊流是單方向的 傳送端和接收端的身份...