第十五章(二) FIFO 訊息佇列及訊號量

2021-06-28 18:11:23 字數 1466 閱讀 3071

fifo

fifo也稱為命名管道,沒有了未命名管道只能在兩個相關程序式之間才能執行的侷限性;

通過fifo, 兩個不相關的程序也能交換資料。

fifo是一種檔案型別,通過stat結構的 st_mode 成員的編碼可以知道檔案是否是fifo型別。 可以用 s_isfifo巨集對此進行測試。

建立fifo類似於 建立檔案,路徑名是事實存在的。

函式    int mkfifo(char *path, mode_t mode);

int mkfifoat(int fd, char *path, mode_t mode);

mode 引數的規格說明與open函式中mode的相同。

當我們用mkfifo建立fifo時,要用open來開啟它。

當open乙個fifo時,非阻塞標誌(o_nonblock)會產生以下影響:

1、在一般情況下(即沒有指定o_nonblock),唯讀open要阻塞到某個其他程序為寫而開啟這個fifo為止。 類似的 ,只寫open要阻塞到某個其他程序為讀而開啟它為止

2、如果指定了o_nonblock,則唯讀open立即返回。但是,如果沒有程序為讀而開啟乙個fifo,那麼只寫open將返回-1, 並將errno設定為enxio

類似於管道,若write乙個尚無程序為讀而開啟的fifo,則產生訊號 sigpipe。 若某個fifo的最後乙個寫程序關閉了該fifo,則將為該fifo的讀程序產生乙個檔案結束標誌。

用途:1、shell命令使用fifo將資料從一條管道傳送到另一條管道時,無需建立中間臨時檔案。

比如:乙個程式要將乙份經過處理的輸入流進行兩次處理:

(tee程式將其標準輸入同時複製到其標準輸出及其命令列中命名的檔案中)

2、客戶程序-伺服器程序應用程式中,fifo用作匯聚點,在客戶程序和伺服器程序之間傳遞資料。

伺服器程序如何將回答送回給各個程序呢。不能使用單個fifo,因為客戶程序不可能知道何時去讀它們的響應以及何時響應其他客戶程序

一種解決方案是,每個客戶程序都在其請求中包含它的程序id,然後伺服器程序為每個客戶程序建立乙個fifo,使用id為基礎的檔名:

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

learn with python 第十五章 繼承

第十六章 繼承 16.1繼承 物件導向語言所擁有的特性是繼承,繼承指定義乙個新的類擁有原來類的方法。繼承最大的好處就是可以在不改變現存 的情況下新增新的方法,稱之為繼承是因為新定義的類擁有父類的所有方法。新建立的類知之為子類。繼承是乙個功能強大的特性,某些情況下如果沒有繼承,一些層序幾乎無法實現。同...

第十五章 磁碟管理

uuid 掛載點swap 產品型別swap 掛載選項預設值default 預設不檢測,檢測順序 0 0 檢視分割槽 swapon s s表示show 手動掛載 swapon dev sda3 缺點 重啟後就消失,想永久生效,寫配置檔案 解除安裝分割槽 swapoff dev sda3 vim etc...