一、管道通訊的特點
1. 管道是單向的,先進先出的。
2.乙個程序在管道尾部寫入資料,另乙個程序在管道頭部讀取資料。因此管道通訊是半雙工的。
3. 管道提供了簡單的流控制機制,當程序試圖讀空管道時,程序將阻塞。當管道已經寫滿時,程序再試圖向管道寫入資料,程序將阻塞。
4.資料被程序讀出,將從管道中刪除
二、管道通訊的區別
1、有名管道
2、無名管道
三、兩種管道通訊的區別
1、有名管道:同一系統中任意兩個程序間的通訊
2、無名管道:用於父子程序之間
四、建立無名管道 -- pipe
函式原型:int pipe(int filedes[2]);
函式引數:filedes[2]為兩個新建的檔案描述符,其中fd[0]表示管道讀取端,fd[1]用於管道寫入端。
標頭檔案: #include
返回值:成功返回0,失敗返回-1。 例:
[plain]view plain
copy
#include
#include
#include
#include
#include
#include
#include
int main()
if((pid = fork()) == 0)
close(pipe_fd[0]);
exit(0);
}
else if(pid > 0)
return 0;
}
六、建立有名管道 -- fifo
函式原型:int mkfifo(const char * pathname,mode_t mode);
函式引數:pathname --建立有名管道的名稱
mode --建立的方式,類似於open
標頭檔案:#include
#include
返回值:成功返回 0,失敗返回-1。
#include
#include
#include
#include
#include
#include
#include
#include
#define fifo "/root/1022/myfifo"
intmain(
intargc,
charchar
**argv)
while(1
)
printf("read %s from fifo\n"
,r_buf);
sleep(1
);
}
pause();
unlink(fifo);
}
[plain]view plain
copy
#include
#include
#include
#include
#include
#include
#include
#define fifo_server "/root/1022/myfifo"
main(int argc,charchar **argv)
strcpy(w_buf,argv[1]);
if(nwrite = write(fd,w_buf,100) == -1)
else
printf("write %s to fifo\n",w_buf);
return 0;
}
程序間通訊方式 管道通訊
c語言中的管道通訊是通過在核心中開闢一塊空間,使用者通過檔案io介面來訪問這塊空空間實現通訊目的。管道的優點是直接訪問記憶體,通訊速度較快。缺點是一方面管道屬於半雙工的通訊,即同一程序只能讀或者寫,無法同時讀寫同一管道。另一方面管道中的資料只能讀一次,無法重複讀取。程序通過檔案io來操作管道,但是不...
程序間通訊方式 管道
1.管道的建立 管道是由呼叫pipe函式來建立 include int pipe int fd 2 返回 成功返回0,出錯返回 1 是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係 父子程序 的程序間使用。2.有名管道和無名管道的區別 有名管道 可以在任意兩個程序之間,有名的名字存在...
程序間通訊 之 管道
一 無名管道 特點 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。1 無名管道的建立 int pipe int pipefd 引數 pipefd 陣列的首位址 返回值 成功返回0,失敗返回 1 注意 無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd 0 讀管道 fd 1 寫管道...