/proc/self/fd/N に書き込むのは安全です。

/proc/self/fd/N に書き込むのは安全です。

/proc/self/fd/Nに書き込むのは安全ですか?ここで、Nはプロセスが所有するファイル記述子です。

私のユースケースは、リモートコンピュータにSSH経由で接続することです。多くのリモートファイルをローカルファイルに。ローカルファイルは、以前に作成された後に他のユーザー/プロセスが表示されないようにすぐに切断されます。

fd = open("/tmp/doo",O_CREAT|O_RDWR);
unlink("/tmp/doo");
...
...
system("ssh -n user@remotehost -- cat /remote_file >/proc/self/fd/N") // N is a valid fd number

シェルでは0〜9しか許可されていないため、出力をfd(cat / remote_file>&N)にリダイレクトできません。

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07

開いたファイルは、0 から始まる 10 進数で表されます。可能な最大値は実装によって定義されます。ただし、すべての実装はアプリケーションを使用するために少なくとも0〜9(含む)をサポートする必要があります。この数字を「ファイル記述子」と呼びます。 0、1、2の値は特別な意味と一般的な用途を持ち、特定のリダイレクト操作によって暗示され、それぞれ標準入力、標準出力、および標準エラーと呼ばれます。プログラムは通常、標準入力から入力を受け取り、標準出力に出力を書き込みます。エラーメッセージは通常標準エラーに記録されます。ファイル記述子番号を指定するために、リダイレクト演算子の前に1つ以上の数字(挿入された文字は許可されていません)が続くことがあります。

出力を2桁のファイル記述子にリダイレクト中に問題が発生しました。

ベストアンサー1

おすすめ記事