Linux學習筆記之 管道

2021-06-29 01:23:37 字數 1373 閱讀 8688

8:管道 

8.1     無名管道

無名管道通常直接稱之為管道,它占用兩個檔案描述符,不能被非血緣關係                

的程序共享,一般應用在父子程序中

8.2     無名管道的建立

#include

int pipe (int fildes[2]);

函式pipe在核心中建立乙個管道,並分配兩個檔案描述符標識管道的兩端,

這兩個檔案描述符儲存於fildes[0],fildes[1]中,一般約定fildes[1]

描述管道的輸入端,程序向此檔案描述符中寫入資料,fildes[0]描述管道

的輸出端,呼叫成功返回0,否則返回-1.

8.3     從父程序流向子程序的管道

1.建立管道

int fildes[2];

pipe(fildes);

2.建立子程序,子程序繼承父程序的管道檔案描述符(p210圖)

3.父程序關閉管道的輸出端,即fildes[0]

close(fildes[0]);

4.子程序關閉fildes[1]

close(fildes[1])

8.4     popen模型

#include

file *popen (const char *command, char *type);

int pclose (file *stream);            

popen首先fork乙個子程序,然後呼叫exec執行引數command中給定的shell

命令,不同的是,函式popen自動在父程序與子程序之間建立了乙個管道,

r          管道資料由子程序流向父程序

w          管道資料由父程序流向子程序

8.5     有名管道的建立

1.mknod建立管道

mknod name p        建立管道檔案

mknod name s        建立訊號量

mknod name m        建立共享記憶體

例1:建立有名管道k1

mknod k1 p;

2.命令mkfifo建立管道

mkfifo [-m mode] file...

mode 是管道檔案建立後的訪問許可權,file是管道檔案建立後的名稱

例1:建立乙個使用者本身可讀寫,其他使用者唯讀的管道檔案k2

mkfifo -m 644 k2;

3.函式mkfifo建立管道

#include

#include

int mkfifo(char *path, mode_t mode);

mode   取值類似open的第三個引數,並且自帶了o_creat,o_excl選項

Linux學習筆記(管道)

管道是一種兩個程序見進行單向通訊的機制,因為管道只能對資料進行單向傳遞,所以管道又稱為半雙工管道。管道是linux由unix繼承而來的ipc形式之一。管道分為無名管道與命名管道。管道的特點 1 只能在有親緣關係的程序之間進行通訊 也就是在父子程序之間通訊 2 單向通訊乙個讀端,乙個寫端,如果要雙向通...

Linux學習筆記 管道PIPE

管道 當從乙個程序連線資料流到另乙個程序時,使用術語管道 pipe include int pipe int filedes 2 建立管道 pipe 說明 返回值 0成功,1出錯。如果呼叫成功,則程序此時由了兩個額外的開啟檔案描述符,filedes 0 中的值是管道的讀取端,而filedes 1 是...

Linux 學習筆記15 管道

在 linux ipc 程序間通訊 中,管道通訊又有三種型別,分別為標準流管道,無名管道和有名管道。file popen const char command,const char open mode int pclose file fp 函式 popen 允許乙個程式將另乙個程式作為新程序來啟動,...