管道基礎

##管道基礎

#通信分類:只寫單工管道、只讀單工管道削锰、半雙工管道(單向讀寫)妹卿、全雙工管道(兩個半雙工管道拼接)

類型 創(chuàng)建/打開 關閉 讀 寫

單工 popen() pclose() read() write()

半雙工 pipe()/open() close() read() write()

FIFO半雙工 mkfifo()/open() close()/unlink() read() write()

全雙工 socketpair() close() read() write()

管道通常用于進程間通信熄求,可以用KFC買東西來比喻渣玲,通過man 7 pipe來查看管道在redhat中的官方解釋。

#管道的分類

@匿名管道

特點:必須是親緣進程之間

案例:

ps_self \\打印自身的父子進程信息

ps_other \\執(zhí)行參數中的命令抡四,并且打印參數中的命令相關的父子進程

分類:

*單工管道

操作: 管道 文件

打開 popen() fopen()

關閉 pclose() pclose()

打開管道:FILE* popen(const char* command,const char* open_mode);

command:命令行字符串

open_mode:只讀"r"柜蜈;只寫"w"

返回值:文件描述符 NULL(打開失斦套弧)

讀寫:

size_t fread(void* buffer,size_t size,size_t count,FILE* stream)

buffer:用于接收數據的內存地址

size:讀取每個數據項的字節(jié)數

count:數據項個數

stream:輸入流

返回值:出錯(>count)指巡、整數(實際讀取的數據項個數)

size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream)

buffer:寫入數據的內存地址

size:寫入數據項的字節(jié)數

count:寫入數據項的個數

stream:目標文件指針

返回值:出錯(>count)淑履、正數(實際寫入的數據項個數)

關閉管道:int pclose(FILE* stream);

stream:文件描述符

返回值:失敗(-1)藻雪、成功(0)

本質:

a.啟動shell和命令兩個進程秘噪,從命令進程中讀/寫文件流

b.解決exec和system無法返回輸出數據問題

特點:

a.方便使用系統(tǒng)自帶功能,并且可以執(zhí)行比較復雜shell

b.默認啟動兩個進程勉耀,效率較低

*半雙工管道

操作:

創(chuàng)建管道:int pipe(int filedes[2])

filedes[0] 讀

filedes[1] 寫

返回值:失斨讣濉(-1)、成功(0)

讀寫

ssize_t write(int fd,const void* buf,size_t nbyte)

fd:文件描述符

buf:寫入數據的內存單元

nbyte:寫入文件指定的字節(jié)數

返回值:出錯(-1)便斥、正數(寫入的字節(jié)數)

ssize_t read(int fd,void* buf,size_t count)

fd:文件描述符

buf:讀入數據的內存單元

返回值:出錯(-1)至壤、0(無數據)、正數(讀取的字節(jié)數)

控制:如果管道是空的枢纠,read()默認是阻塞

int fcntl(int fd,int cmd,long arg)

fd:文件描述符

cmd:F_GETFL(獲取文件描述符狀態(tài))像街、F_SETFL(設置文件描述符狀態(tài))、……

arg:O_NONBLOCK(非阻塞)晋渺、O_BLOCK(阻塞)镰绎、……

fcnt(filedes,F_SETFL,O_NONBLOCK); \\把文件描述符改為非阻塞的。

關閉管道:close(filedes)

本質:文件描述符[文件流是文件描述符之上的封裝木西。文件流通過增加緩沖區(qū)減少讀寫系統(tǒng)調用次數來提高讀寫效率畴栖。在進程的用戶空間封裝的FILE結構,以提高可移植性和效率]

*復制管道

定義:Linux內核使用三個關聯(lián)的數據結構八千,表示打開的文件吗讶。【描述符表恋捆,文件表照皆,v-node表】內核為每個進程創(chuàng)建的文件文件描述符。

分類 文件描述符 文件號

標準輸入 STDIN_FILENO 0

標準輸出 STDOUT_FILENO 1

標準出錯信息 STDERR_FILENO 2

int dup(oldfd) \\返回值:-1(失旔拧)纵寝、其他(新的文件描述符)

int dup2(int oldfd,int newfd) \\返回值:-1(失敗)星立、其他(最小及尚未使用的文件描述符)

@【半雙工】FIFO管道/命名管道

特點:可以是非親緣進程之間爽茴;讀寫必須同時執(zhí)行,否則阻塞绰垂。

案例:FIFO工具箱

操作:

創(chuàng)建命名管道:int mkfifo(pathname,mode)【古老方式:int mknod(const char *filename,mode_t mode | S_IFIFO,(dev_t)0);】

pathname:文件路徑【文件必須不存在】

mode:模式

返回值:0(成功)室奏、非零(失敗)

打開FIFO文件:int open(const char* path,int mode)

pathname:文件路徑

mode:模式【O_RDONLY(阻塞只讀)劲装、O_RDONLY|O_NONBLOCK(非阻塞只讀)胧沫、O_WRONLY(阻塞只寫)昌简、O_WRONLY|O_NONBLOCK(非阻塞只寫)】

返回值:-1(失敗)绒怨、其他(文件描述符)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末纯赎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子南蹂,更是在濱河造成了極大的恐慌犬金,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件六剥,死亡現(xiàn)場離奇詭異晚顷,居然都是意外死亡,警方通過查閱死者的電腦和手機疗疟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門该默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人策彤,你說我怎么就攤上這事栓袖。” “怎么了锅锨?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵叽赊,是天一觀的道長。 經常有香客問我必搞,道長必指,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任恕洲,我火速辦了婚禮塔橡,結果婚禮上,老公的妹妹穿的比我還像新娘霜第。我一直安慰自己葛家,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布泌类。 她就那樣靜靜地躺著癞谒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刃榨。 梳的紋絲不亂的頭發(fā)上弹砚,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音枢希,去河邊找鬼桌吃。 笑死,一個胖子當著我的面吹牛苞轿,可吹牛的內容都是我干的茅诱。 我是一名探鬼主播逗物,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瑟俭!你這毒婦竟也來了翎卓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤尔当,失蹤者是張志新(化名)和其女友劉穎莲祸,沒想到半個月后蹂安,有當地人在樹林里發(fā)現(xiàn)了一具尸體椭迎,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年田盈,在試婚紗的時候發(fā)現(xiàn)自己被綠了畜号。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡允瞧,死狀恐怖简软,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情述暂,我是刑警寧澤痹升,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站畦韭,受9級特大地震影響疼蛾,放射性物質發(fā)生泄漏。R本人自食惡果不足惜艺配,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一察郁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧转唉,春花似錦皮钠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砖织,卻和暖如春款侵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镶苞。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工喳坠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茂蚓。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓壕鹉,卻偏偏與公主長得像剃幌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晾浴,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容

  • 管道通信 進程間管道通信方式可以通過man 7 pipe來查看负乡; 匿名管道 單工管道 打開管道:使用popen()...
    秋風弄影閱讀 726評論 0 0
  • ### main函數執(zhí)行之前做了什么?(iOS) & dyld 是Apple 的動態(tài)鏈接器;在 xnu 內核為程...
    天使君閱讀 692評論 0 1
  • 進程間的通信主要分為本機器進程間的通信和不同機器間進程的通信脊凰。本文主要描述本機進程間的通信抖棘。 一、傳統(tǒng)Linux的...
    一葉之界閱讀 401評論 0 2
  • 國內自由職業(yè)者 1.AAwork 自由職業(yè)者平臺 國內自由職業(yè)者代表性平臺之一狸涌,將用戶的閑置知識技能轉化為個人的知...
    米克先生閱讀 5,005評論 0 5
  • 像素(Pixel) 像素切省,從字面上來理解就是圖像的基本元素,類比于現(xiàn)實世界中原子與物質之間的關系帕胆。 上圖是某張圖片...
    yjiyjige閱讀 1,748評論 0 2