![標準 I/O ファイル記述子](https://rvso.com/image/31674/%E6%A8%99%E6%BA%96%20I%2FO%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%98%E8%BF%B0%E5%AD%90.png)
私はこれをコード化します
$ ls -l 1> stdout.txt
そして望み通りの出力が得られました。
1> stdout.txt
標準出力からの出力を stdout.txt ファイルにリダイレクトします。
ディスク上にそのようなファイルが存在するとは思えません。どのようなファイルシステムがそのようなファイルをサポートしていますか?ラムス?
これは、プロセスそしてsysfs?
答え1
Linuxをお使いの場合、そしてあなたの質問を正しく理解しているなら、はい、/proc
。
特定のプロセスについては/proc/[pid]/fd
、例えばls -l /proc/123/fd/
現在のプロセスの fd にアクセスする特別な方法もあります: /proc/self/fd
。
eg はプロセスls -l /proc/self/fd
用でありls
、現在のシェル用ではないことに注意してください。これは次のように確認できます。
cat /proc/self/cmdline | tr '\000' '\n'
または
cat /proc/self/status
最後に、PPid
シェルの PID がどれになるかを確認してください。
Name: cat
State: R (running)
Tgid: 12696
Pid: 12696
PPid: 312
実験として、2 つのターミナル ウィンドウを開いてみてください。
- ウィンドウ 1 で入力して
echo $$
、そのシェルの PID を取得します。 - ウィンドウ2で言う
cat /proc/[pid]/fd/1
- ウィンドウ 1 で入力を開始し、ウィンドウ 2 で何が起こるか観察します。