久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > IPC機制之(zhi)管道

IPC機制之管(guan)道 時間(jian):2018-12-17   ; ;  來源:華清遠見(jian)

每(mei)個(ge)(ge)進(jin)(jin)(jin)程(cheng)(cheng)(cheng)各自(zi)有不同的用(yong)戶地址空(kong)間,任何一個(ge)(ge)進(jin)(jin)(jin)程(cheng)(cheng)(cheng)的全局變量在另一個(ge)(ge)進(jin)(jin)(jin)程(cheng)(cheng)(cheng)中(zhong)都看不到,所以進(jin)(jin)(jin)程(cheng)(cheng)(cheng)之(zhi)間要交換數(shu)(shu)據必須通過(guo)內(nei)核(he),在內(nei)核(he)中(zhong)開辟一塊緩(huan)沖(chong)區,進(jin)(jin)(jin)程(cheng)(cheng)(cheng)1把(ba)數(shu)(shu)據從用(yong)戶空(kong)間拷到內(nei)核(he)緩(huan)沖(chong)區,進(jin)(jin)(jin)程(cheng)(cheng)(cheng)2再從內(nei)核(he)緩(huan)沖(chong)區把(ba)數(shu)(shu)據讀走,內(nei)核(he)提供(gong)的這種(zhong)機制稱為進(jin)(jin)(jin)程(cheng)(cheng)(cheng)間通信(IPC,InterProcess Communication)。

管(guan)道是一種最基本的(de)IPC機制,由pipe函數(shu)創建(jian):

int pipe(int filedes[2]);

調(diao)(diao)用pipe函(han)數(shu)時在(zai)內核中開辟(pi)一塊緩沖區(qu)(qu)(稱為(wei)管道)用于(yu)通(tong)信,它有一個(ge)讀(du)端(duan)一個(ge)寫端(duan),然后通(tong)過(guo)filedes參數(shu)傳出給用戶程序兩個(ge)文(wen)件(jian)描(miao)述符,filedes[0]指向(xiang)管道的(de)(de)讀(du)端(duan),filedes[1]指向(xiang)管道的(de)(de)寫端(duan)(很好記,就像(xiang)0是標準(zhun)輸入1是標準(zhun)輸出一樣(yang))。所以(yi)管道在(zai)用戶程序看起來就像(xiang)一個(ge)打開的(de)(de)文(wen)件(jian),通(tong)過(guo)read(filedes[0]);或者write(filedes[1]);向(xiang)這個(ge)文(wen)件(jian)讀(du)寫數(shu)據其(qi)實是在(zai)讀(du)寫內核緩沖區(qu)(qu)。pipe函(han)數(shu)調(diao)(diao)用成功返回(hui)0,調(diao)(diao)用失敗(bai)返回(hui)-1。

管道具體的劃分為兩種(zhong):命令管道與匿名管道

1.命名管道(FIFO)

匿名管道(dao)應用的(de)一個限制就是只能(neng)在具有共同祖先(xian)(具有親緣關系)的(de)進程間(jian)通信(xin)。

如果我們想在不相關(guan)的進程之間交(jiao)換數據(ju),可以使用FIFO文(wen)件來做這項工作,它經常被稱為命(ming)名(ming)管道。

命(ming)名(ming)管道(dao)可以從命(ming)令(ling)(ling)行(xing)上創建,命(ming)令(ling)(ling)行(xing)方法是使(shi)用下面(mian)這個命(ming)令(ling)(ling):

$ mkfifo filename

命名管(guan)道也(ye)可以從(cong)程序里(li)創建,相關函數有:

int mkfifo(const char *filename,mode_t mode);

2.匿名管道

匿名管(guan)道(dao)由(you)pipe函數創建并(bing)打開。

命名(ming)管(guan)道由mkfifo函數創建,打開(kai)用open。

FIFO(命名管道)與pipe(匿名管道)之(zhi)間唯一的(de)區別(bie)在它(ta)們創建(jian)與打開的(de)方式不同,這(zhe)些工作完成(cheng)之(zhi)后(hou),它(ta)們具有相(xiang)同的(de)語義。

3.命名管道(dao)的(de)打開(kai)規則

如果當前打(da)開操作(zuo)是為(wei)讀而打(da)開FIFO時

 O_NONBLOCK disable:阻(zu)塞直到(dao)有相應進程為寫而打(da)開(kai)該FIFO

O_NONBLOCK enable:立刻返回成功

如果當(dang)前打開操(cao)作(zuo)是為寫而打開FIFO時(shi)

O_NONBLOCK disable:阻塞直到有(you)相(xiang)應(ying)進程(cheng)為(wei)讀而打開該FIFO

O_NONBLOCK enable:立(li)刻返回失敗(bai),錯誤(wu)碼為ENXIO

需要注意的(de)是打開的(de)文件描(miao)述符默認是阻塞的(de),大(da)家可以寫兩個很簡單(dan)的(de)小程序測試一下,主(zhu)要也就(jiu)一條語句

int fd = open("p2", O_WRONLY); 假設(she)p2是命名管道(dao)文(wen)件,把打(da)開標(biao)志換成 O_RDONLY 就是另一個程(cheng)(cheng)序了(le),可以(yi)先運(yun)行(xing)RD程(cheng)(cheng)序,此(ci)時(shi)會阻塞(sai),再在(zai)另一個窗口運(yun)行(xing)WR程(cheng)(cheng)序,此(ci)時(shi)兩個程(cheng)(cheng)序都(dou)會從open返回成功。非阻塞(sai)時(shi)也(ye)不難(nan)測試,open時(shi)增(zeng)加標(biao)志位(wei)就可以(yi)了(le)。

 

上一篇:什么是Bootloader

下一篇:哈夫曼算法原理

熱(re)點文(wen)章推薦(jian)
華清學員(yuan)就業榜單
高薪學(xue)員經驗分(fen)享
熱點新聞推薦
前臺專線(xian):010-82525158 企業培訓(xun)洽談(tan)專(zhuan)線:010-82525379 院(yuan)校(xiao)合作洽談專(zhuan)線(xian):010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部