如何確定我的系統上進程替換建立 FIFO 檔案的位置?

如何確定我的系統上進程替換建立 FIFO 檔案的位置?

我正在編寫一個 C++ 應用程序,需要在 Bash shell 中處理進程替換。

我正在嘗試找到一種方法來驗證作為參數傳遞給我的程式的路徑,其中一些路徑指向由進程替換創建的 FIFO 檔案。

是否有 shell(或 C++)方法可以檢查系統是否建立這些檔案/dev/fd或它們是否在其他地方建立?

答案1

簡短的回答是你不能這樣做。僅僅因為 bash 預設放置 fifo 路徑的目錄,並不意味著該目錄中的特定 fifo 是由 bash 創建的,或者它是由 bash 作為參數傳遞給命令的。

從更大的角度看你的問題。你真正想解決什麼問題?

如果您試圖解決「我的程式的輸出必須始終透過管道傳輸到另一個程式」的問題,那麼就不需要用戶使用 bash 的晦澀的進程替換。如果系統上的預設 shell 是 zsh 怎麼辦?伯恩外殼?科恩殼?

相反,讓您的程式建立一個管道、分叉並執行另一個程式。

那麼,你真正想做什麼?如果您(上帝禁止)將輸出寫入程式使用者傳遞的檔案而不是 bash 創建的 fifo 中,會發生什麼?

答案2

使用該-p選項來確定test文件是否為管道:

#!/bin/bash
file="$1"
if [ -p "$file" ]
then
    echo "$file is a pipe"
fi

演示:

$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe

相關內容