プロセス置換によって FIFO ファイルが作成されるシステム上の場所をどのように判断すればよいでしょうか?

プロセス置換によって FIFO ファイルが作成されるシステム上の場所をどのように判断すればよいでしょうか?

私は C++ アプリケーションを作成しており、Bash シェルでプロセス置換を操作する必要があります。

プログラムに引数として渡されるパスを検証する方法を探しています。そのパスの一部は、プロセス置換によって作成された FIFO ファイルを指しています。

システムがこれらのファイルを作成するのか/dev/fd、それとも別の場所に作成されるのかを確認できるシェル (または C++) の方法はありますか?

答え1

簡単に答えると、これはできません。ディレクトリが bash がデフォルトで fifo パスを配置する場所であるからといって、そのディレクトリ内の特定の fifo が bash によって作成されたか、または bash によってコマンドの引数として渡されたことを意味するわけではありません。

問題の全体像を見てみましょう。本当に解決しようとしているのは何ですか?

「プログラムの出力は常に別のプログラムにパイプされる必要がある」という問題を解決しようとしている場合は、ユーザーに bash のわかりにくいプロセス置換を使用するように要求しないでください。システムのデフォルト シェルが zsh の場合はどうでしょうか。Bourne シェルですか。Korn シェルですか。

代わりに、プログラムでパイプを作成し、フォークして、他のプログラムを実行させます。

では、実際に何をしようとしているのでしょうか? 万が一、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

関連情報