程序間通訊方式 管道通訊

2021-10-23 05:01:58 字數 1522 閱讀 8874

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