<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程間通信之:管道

進(jìn)程間通信之:管道

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257127.htm

8.2.5FIFO

1.有名說(shuō)明

前面介紹的是無(wú)名,它只能用于具有親緣關(guān)系的之間,這就大大地限制了管道的使用。有名管道的出現突破了這種限制,它可以使互不相關(guān)的兩個(gè)實(shí)現彼此通信。該管道可以通過(guò)路徑名來(lái)指出,并且在文件系統中是可見(jiàn)的。在建立了管道之后,兩個(gè)就可以把它當作普通文件一樣進(jìn)行讀寫(xiě)操作,使用非常方便。不過(guò)值得注意的是,FIFO是嚴格地遵循先進(jìn)先出規則的,對管道及FIFO的讀總是從開(kāi)始處返回數據,對它們的寫(xiě)則把數據添加到末尾,它們不支持如lseek()等文件定位操作。

有名管道的創(chuàng )建可以使用函數mkfifo(),該函數類(lèi)似文件中的open()操作,可以指定管道的路徑和打開(kāi)的模式。

小知識

用戶(hù)還可以在命令行使用“mknod管道名p”來(lái)創(chuàng )建有名管道。

在創(chuàng )建管道成功之后,就可以使用open()、read()和write()這些函數了。與普通文件的開(kāi)發(fā)設置一樣,對于為讀而打開(kāi)的管道可在open()中設置O_RDONLY,對于為寫(xiě)而打開(kāi)的管道可在open()中設置O_WRONLY,在這里與普通文件不同的是阻塞問(wèn)題。由于普通文件的讀寫(xiě)時(shí)不會(huì )出現阻塞問(wèn)題,而在管道的讀寫(xiě)中卻有阻塞的可能,這里的非阻塞標志可以在open()函數中設定為O_NONBLOCK。下面分別對阻塞打開(kāi)和非阻塞打開(kāi)的讀寫(xiě)進(jìn)行討論。

(1)對于讀進(jìn)程。

n 若該管道是阻塞打開(kāi),且當前FIFO內沒(méi)有數據,則對讀進(jìn)程而言將一直阻塞到有數據寫(xiě)入。

n 若該管道是非阻塞打開(kāi),則不論FIFO內是否有數據,讀進(jìn)程都會(huì )立即執行讀操作。即如果FIFO內沒(méi)有數據,則讀函數將立刻返回0。

(2)對于寫(xiě)進(jìn)程。

n 若該管道是阻塞打開(kāi),則寫(xiě)操作將一直阻塞到數據可以被寫(xiě)入。

n 若該管道是非阻塞打開(kāi)而不能寫(xiě)入全部數據,則讀操作進(jìn)行部分寫(xiě)入或者調用失敗。

2.mkfifo()函數格式

表8.4列出了mkfifo()函數的語(yǔ)法要點(diǎn)。

表8.4 mkfifo()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/types.h>
#includesys/state.h>

函數原型

intmkfifo(constchar*filename,mode_tmode)

函數傳入值

filename:要創(chuàng )建的管道

函數傳入值

mode:

O_RDONLY:讀管道

O_WRONLY:寫(xiě)管道

O_RDWR:讀寫(xiě)管道

O_NONBLOCK:非阻塞

函數傳入值

mode:

O_CREAT:如果該文件不存在,那么就創(chuàng )建一個(gè)新的文件,并用第三個(gè)參數為其設置權限

O_EXCL:如果使用O_CREAT時(shí)文件存在,那么可返回錯誤消息。這一參數可測試文件是否存在

函數返回值

成功:0

出錯:-1

表8.5再對FIFO相關(guān)的出錯信息做一歸納,以方便用戶(hù)查錯。

表8.5 FIFO相關(guān)的出錯信息

EACCESS

參數filename所指定的目錄路徑無(wú)可執行的權限

EEXIST

參數filename所指定的文件已存在

ENAMETOOLONG

參數filename的路徑名稱(chēng)太長(cháng)

ENOENT

參數filename包含的目錄不存在

ENOSPC

文件系統的剩余空間不足

ENOTDIR

參數filename路徑中的目錄存在但卻非真正的目錄

EROFS

參數filename指定的文件存在于只讀文件系統內

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>