程序通訊中的有名管道

2021-08-21 17:48:54 字數 1537 閱讀 6878

1.有名管道:

在檔案系統種,有個管道的節點。然後兩個不同程序,可以通過系統io所提供的介面函式,去實現通訊。

open   read/write   close

2.建立

mkfifo(char *name,mode_t mode); 第乙個引數為建立節點的名字,第二個引數為建立這個節點的訪問許可權

3.包含的標頭檔案及函式

#include

#include

#include

#include

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

int nfds, 這個是我們需要監聽的fd最大值加1,

fd_set *readfds這個引數是監聽可讀fd

fd_set *writefds這個是監聽可寫的fd。

fd_set *exceptfds監聽出錯的fd。

struct timeval *timeout這個是超時的時間。

使用步驟:

先宣告需要監聽的集合,然後 先把這個監聽的集合清空,fd_zero(fd_set *set);,然後把我們需要監聽的fd新增到剛才

清空的這個集合裡面,fd_set(int fd, fd_set *set);

返回值:    

返回值小於0,說明有出錯。

返回值等於0,說明超時。

如果是大於,說明有可讀的fd,然後去判斷是那個fd可讀。fd_isset(int fd, fd_set *set);如果是這個fd可讀,就返回真。接下       來就去讀該fd。

void fd_clr(int fd, fd_set *set);

int  fd_isset(int fd, fd_set *set);

void fd_set(int fd, fd_set *set);

void fd_zero(fd_set *set);

例子:#include

#include

#include

#include

#include

#include

#include

int main()

while(1)

if(fd_isset(fileno(stdin),&read_fd))//判斷標準輸入是不是在集合裡

}close(wfd);

close(rfd);

return 0;

}#include

#include

#include

#include

#include

#include

#include

int main()

while(1)

if(fd_isset(fileno(stdin),&read_fd))

}close(wfd);

close(rfd);

return 0;

}

程序通訊 有名管道

無名管道只能由父子程序使用 但是通過命名管道,不相關的程序也能交換資料。建立管道mkfifo 開啟管道open 讀管道read 寫管道write 關閉管道close 刪除管道unlink 函式作用 建立有名管道 函式原型 int mkfifo const char pathname,mode t m...

程序間通訊 有名管道

無名管道,由於沒有名字,只能用於親緣關係的程序間通訊.為了克服這個缺點,提出了有名管道 fifo fifo不同於無名管道之處在於它提供了乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中,這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊,因...

程序間通訊 有名管道

mkfifo test 這條命令建立了乙個名字為 test 的命名管道。接下來我們用乙個程序向這個管道裡面寫資料,然後有另外乙個程序把裡面的資料讀出來。echo this is a pipe test 寫資料 這個時候管道的內容沒有被讀出的話,那麼這個命令就會一直停在這裡,只有當另外乙個程序把 te...