我們向管道中寫入資料時,linux將不保證寫入的原子性,管道緩衝區一有空閒區域,寫程序就會試圖相關到中寫入資料。如果杜金城不讀走管道緩衝區的資料,那麼寫操作將會一直阻塞。
只有讀端存下的時候,向管道中寫資料才有意義。否則相關到中寫入資料的程序將受到核心傳來的sifpipe,我們可以通過這個訊號來判斷讀端是否退出。
有名管道和無名管道(pipe)最大的不同在於,有名管道可以在互不相關的兩個程序間通訊,有名管道在檔案中是可見的,但是它只是掛乙個名字而已,重頭到尾,該檔案的大小都是0。它同樣是不支援iseek()函式操作。並且是遵循先進先出的規則。
寫乙個fifo的程式應該包含的標頭檔案有:#include 、#include 、#include
int mkfifo(const char *filename,mode_t mode);建立乙個管道,並指定這個管道檔案的讀寫屬性
int main()
return 0;
}
/*readfifo.c*/
#include #include #include #include #include #include #include #include #define n 64
int main()
printf("read:open\n");
while (1)
exit(0);
}
/*writefifo.c*/
#include #include #include #include #include #include #include #include #define n 64
int main()
printf("write:open\n");
while (fgets(buf, n, stdin) != null)//abc\n\0
exit(0);
}
接下來我們要完成乙個「利用fifo和訊號機制的程序間同步通訊
」的程式:
推薦的文章:linux 下程序間通訊機制(二) pipe和fifo
程序間通訊 有名管道(FIFO)
1 何謂程序間通訊?多個程序之間資料相互交換稱為程序間通訊。2 程序間通訊的方式都有哪些?1 訊號 2 管道 3 訊號量 4 訊息佇列 5 共享儲存 共享記憶體 6 套接字 訊號在之前的部落格已經講過了,今天重點是說一下管道中的有名管道。3 管道 管道分為兩種 1 半雙工通訊 半雙工通訊是指通訊雙方...
程序間通訊 有名管道(FIFO)
有名管道也被稱為fifo檔案,是一種特殊的檔案。由於linux所有的事物都可以被視為檔案,所以對命名管道的使用也就變得與檔案操作非常統一。用如下兩個函式中的其中乙個,可以建立命名管道。include include int mkfifo const char filename,mode t mode...
Linux程序間通訊 有名管道FIFO
常規的匿名管道通過pipe建立一片記憶體緩衝區,並對外提供兩個檔案描述符,用於唯讀或者只寫操作。但其使用範圍很小,只能用於父 子程序間的通訊。因此linux還提供有名管道的支援。管道的本質是一片可以讀寫的緩衝區域,linux將其描述為檔案 unix思想 一切io皆是檔案 對於有名管道,其主要特點是 ...