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

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 管道通信(xin): 有名管道 無名管道,行業(ye)大牛通通教會你

管(guan)道通信: 有名(ming)管(guan)道 無名(ming)管(guan)道,行業大牛通通教(jiao)會(hui)你 時間:2018-07-17      來源:未知

管(guan)(guan)道是(shi)一種最古老(lao)也(ye)是(shi)最基本的(de)系(xi)統(tong)IPC形式,管(guan)(guan)道就(jiu)像現(xian)實(shi)中的(de)水(shui)(shui)管(guan)(guan),水(shui)(shui)就(jiu)像數據,它是(shi)消息傳遞(di)的(de)一種特殊方(fang)式,管(guan)(guan)道機(ji)制必須提供三方(fang)面(mian)的(de)協調能力:互斥、同步和(he)確定(ding)對方(fang)的(de)存在。在Linux中是(shi)一種使(shi)用非常頻繁的(de)通信機(ji)制。從(cong)本質上說(shuo),管(guan)(guan)道也(ye)是(shi)一種文(wen)件,但(dan)它又和(he)一般的(de)文(wen)件有所不(bu)同;所有的(de)Linux系(xi)統(tong)都提供此種通信機(ji)制。

管道有以(yi)下局限(xian)性:

1、它是半雙工的(de),即(ji)數據(ju)一個(ge)管道(dao)上的(de)數據(ju)只能在一個(ge)方向上流(liu)動,如果(guo)要實現雙向通信(xin),就(jiu)必須(xu)在兩個(ge)進程(cheng)之(zhi)間建立(li)兩個(ge)管道(dao);

2、管(guan)道(dao)的緩沖區是(shi)有(you)限的(管(guan)道(dao)制存在(zai)于內存中,在(zai)管(guan)道(dao)創建時(shi),為緩沖區分配(pei)一(yi)個頁面(mian)大小);

3、管(guan)道(dao)所傳送的(de)是無格(ge)式(shi)字節流,這就要求管(guan)道(dao)的(de)讀出方(fang)(fang)和寫入(ru)方(fang)(fang)必須事先約定好(hao)數據(ju)的(de)格(ge)式(shi),比如(ru)多(duo)少字節算作一個消息(xi)(或命令、或記錄)等(deng)等(deng)。

4、管道只能(neng)在具有公共祖先的兩(liang)個進程之(zhi)間(jian)使用等等;

通常,進(jin)(jin)程(cheng)(cheng)會先調用pipe函數產生管道,接著調用fork()函數,fork函數會將父進(jin)(jin)程(cheng)(cheng)的(de)(de)相關(guan)數據(ju)結構繼承到子進(jin)(jin)程(cheng)(cheng)中(zhong),這樣(yang)就使子進(jin)(jin)程(cheng)(cheng)中(zhong)的(de)(de)文(wen)件描述(shu)符表中(zhong)的(de)(de)fd[0]和fd[1]指向父進(jin)(jin)程(cheng)(cheng)所(suo)指向的(de)(de)管道文(wen)件,這樣(yang)就能實現兩個進(jin)(jin)程(cheng)(cheng)之間的(de)(de)通信。

管道(dao)(dao)通信分(fen)為無名管道(dao)(dao)個命名管道(dao)(dao),其中,無名管道(dao)(dao):

int pipe(int filedes[2]);

返(fan)回值:成(cheng)功,返(fan)回0,否則返(fan)回-1。參數(shu)數(shu)組包含pipe使用(yong)的(de)兩個文件的(de)描(miao)述符。fd[0]:讀管道,fd[1]:寫管道。

必須在(zai)fork()中(zhong)調用pipe(),否(fou)則子進程不(bu)會繼承文件描述(shu)符(fu)。兩個(ge)進程不(bu)共享祖先進程,就不(bu)能使(shi)用pipe。但是可以使(shi)用命名管道。

命名管(guan)道FIFO:

 管道(dao)最大(da)的(de)劣勢就是(shi)(shi)沒有(you)名字,只能用于有(you)一個共同(tong)祖(zu)先(xian)進程(cheng)的(de)各個進程(cheng)之間。FIFO代表先(xian)進先(xian)出,單它(ta)是(shi)(shi)一個單向數據流(liu),也就是(shi)(shi)半雙(shuang)工,和無名管道(dao)不同(tong)的(de)是(shi)(shi):每個FIFO都有(you)一個路徑與之關聯,從而允許無親緣關系的(de)進程(cheng)訪問。

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

這(zhe)里pathname是路徑名,mode是sys/stat.h里面(mian)定義(yi)的創建(jian)文件的權限.

命名管道具(ju)有很好(hao)的使用靈活(huo)性,表現在:

管(guan)(guan)道(dao)是一(yi)(yi)(yi)種把兩個(ge)進(jin)程(cheng)(cheng)之間(jian)的(de)(de)(de)(de)標(biao)準輸入(ru)和(he)標(biao)準輸出連(lian)接起來(lai)的(de)(de)(de)(de)機制,從而提(ti)供一(yi)(yi)(yi)種讓多個(ge)進(jin)程(cheng)(cheng)間(jian)通信的(de)(de)(de)(de)方法,當進(jin)程(cheng)(cheng)創建管(guan)(guan)道(dao)時(shi),每次都需要提(ti)供兩個(ge)文件描述符來(lai)操作管(guan)(guan)道(dao)。其中一(yi)(yi)(yi)個(ge)對(dui)(dui)管(guan)(guan)道(dao)進(jin)行寫(xie)操作,另一(yi)(yi)(yi)個(ge)對(dui)(dui)管(guan)(guan)道(dao)進(jin)行讀操作。對(dui)(dui)管(guan)(guan)道(dao)的(de)(de)(de)(de)讀寫(xie)與一(yi)(yi)(yi)般的(de)(de)(de)(de)IO系統函數一(yi)(yi)(yi)致,使用write()函數寫(xie)入(ru)數據,使用read()讀出數據。它(ta)是由內(nei)核管(guan)(guan)理的(de)(de)(de)(de)一(yi)(yi)(yi)個(ge)緩(huan)沖區(qu)(qu),它(ta)的(de)(de)(de)(de)一(yi)(yi)(yi)端連(lian)接一(yi)(yi)(yi)個(ge)進(jin)程(cheng)(cheng)的(de)(de)(de)(de)輸出,另一(yi)(yi)(yi)端連(lian)接一(yi)(yi)(yi)個(ge)進(jin)程(cheng)(cheng)的(de)(de)(de)(de)輸入(ru)。管(guan)(guan)道(dao)的(de)(de)(de)(de)緩(huan)沖區(qu)(qu)不需要很大,它(ta)被(bei)設計為環形的(de)(de)(de)(de)數據結構,當兩個(ge)進(jin)程(cheng)(cheng)都終止后,管(guan)(guan)道(dao)的(de)(de)(de)(de)生命周期也會被(bei)結束。

注:只有(you)(you)在(zai)(zai)管(guan)(guan)道(dao)的讀端(duan)存(cun)在(zai)(zai)時,向管(guan)(guan)道(dao)中寫入數據才(cai)有(you)(you)意義(yi),具有(you)(you)親緣關系通過(guo)進程(cheng)(cheng)(cheng)間通信,用戶自(zi)己創建管(guan)(guan)道(dao),完成讀寫操作,管(guan)(guan)道(dao)和FIFO的數據是字節(jie)流(liu),應用程(cheng)(cheng)(cheng)序之間必(bi)須事先(xian)確定特定的傳輸(shu)"協(xie)議",同時,父子進程(cheng)(cheng)(cheng)在(zai)(zai)運行時,它(ta)們的先(xian)后次序并不能保證。因此,為了(le)保證父子進程(cheng)(cheng)(cheng)已經關閉了(le)相應的文(wen)件(jian)描(miao)述符(fu),可在(zai)(zai)兩個進程(cheng)(cheng)(cheng)中調(diao)用sleep()函數達(da)成。

上一篇:信號量是什么,讓你幾分鐘弄懂

下一篇:linux移植方法步驟?大牛區區幾步教會你

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

回到頂部