LOG

ファイル記述子

Shellの勉強シリーズ

ファイルディスクリプタやFDとも言う。
(windowsではファイルハンドルが相当)

プロセスが扱うファイルや外部の出入口の番号みたいなもの

ファイルへの参照を抽象化した番号。
OSから割り当てられる。

0標準入力 (stdin)
1標準出力 (stdout)
2標準エラー出力 (stderr)

この3つは、プロセス実行時に開かれ、プロセスが終了すると閉じられる。
それ以外は明示的に閉じる必要がある?

図で表すとこう
FD1

一般にファイル記述子は、オープン中ファイルの詳細を記録しているカーネル内データ構造(配列)へのインデックスである。POSIXでは、これをファイル記述子テーブルと呼び、各プロセスが自身のファイル記述子テーブルを持つ。ユーザーアプリケーションは抽象キー( = ファイル記述子 )をシステムコール経由でカーネルに渡し、カーネルはそのキーに対応するファイルにアクセスする。アプリケーション自身はファイル記述子テーブルを直接読み書きできない。
UNIX系システムでは、ファイル記述子がファイルだけでなく、ディレクトリ、ブロックデバイスやキャラクターデバイス(スペシャルファイルとも呼ぶ)、ソケット、FIFO(名前付きパイプ)、名前なしパイプなどのカーネルオブジェクトを汎用的に参照するのに使われる。
引用:ファイル記述子

パイプで使うと、つまりこういうこと

% ls -al | grep Desk

図で言うと

FD2

ファイル記述子のクローズ

明示的に閉じたい場合は「&-」を使う

0<&-標準入力クローズ
1>&-標準出力クローズ
2>&-標準エラー出力クローズ

「dev/null」へのリダイレクトとは違いファイル拡張子自体が未使用の状態になる。

参考