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...