Linux學習筆記 命名管道(FIFO)

2021-09-07 15:48:31 字數 1436 閱讀 1082

目錄理論

例子在int mkfifo(const char *pathname, mode_t mode)

成功返回o,出錯返回-1

他包含在標頭檔案:

#include

#include

這裡要注意:

1.只要對fifo有適當的訪問許可權,fifo可用在任何兩個沒有任何關係的程序之間通訊;

2.本質是核心中的一塊快取,另在檔案系統中以乙個特殊的裝置檔案(管道檔案)存在;

3.在檔案系統中只有乙個索引塊存放檔案的路徑,沒有資料塊,所有資料存放在核心中;

4.命名管道必須在讀和寫中同時開啟,否則單獨讀或者單獨寫會發生阻塞;

5.命令mkfifo建立命名管道(命令內部呼叫mkfifo函式)

6.對fifo的操作與操作普通檔案一樣;

程式執行截圖如下:

//從命名管道中讀取資料

char buf[512];

memset(buf, 0, sizeof(buf));

while(read(fd, buf, sizeof(buf)) < 0)

printf("%s\n", buf);

close(fd);

exit(0);

}fifo_write.c原始碼如下:

#include #include #include #include #include int main(int argc, char *ar**)

printf("open fifo write ... \n");

//開啟命名管道

int fd = open(ar**[1], o_wronly);

if(fd < 0)

else

char *s = "12345678901234";

size_t size = strlen(s);

if(write(fd, s, size) != size)

close(fd);

exit(0);

}

這裡要建立乙個pip,命令如下:mkfifo s.pipo

Linux 匿名管道pipe與命名管道FIFO

什麼是管道 功能 建立匿名管道 引數 fd 檔案描述符陣列,其中fd 0 表 示讀端,fd 1 表 示寫端 返回值 成功返回0,失敗返回錯誤 實現 include include include include int main memset buf,0x00,sizeof buf 從管道中讀取 i...

Linux命名管道

命名管道實現了沒有親緣關係的程序的通訊,建立命名管道時候,系統建立了乙個fifo的檔案,通過對檔案的操作,實現走了沒有親緣關係的管道也可以資料交換,相比普通管道 命名管道多了管道的開啟和刪除,因為是檔案嗎,當然劇本檔案的屬性了。1.可以通過該shell命令建立命名管道,mknod 和mkfifo,比...

Linux學習筆記(管道)

管道是一種兩個程序見進行單向通訊的機制,因為管道只能對資料進行單向傳遞,所以管道又稱為半雙工管道。管道是linux由unix繼承而來的ipc形式之一。管道分為無名管道與命名管道。管道的特點 1 只能在有親緣關係的程序之間進行通訊 也就是在父子程序之間通訊 2 單向通訊乙個讀端,乙個寫端,如果要雙向通...