システムコールで遊んでみる その1 やシステムコールで遊んでみる その2でも出てきていますが、UNIXシェルから見ていくことにしましょう。
ファイルディスクリプタ(file descriptor)はファイル記述子とも呼ばれます。 Cのヘッダファイルunistd.h
では標準入力、標準出力、標準エラーを表すマクロが定義されています。 STDIN_FILENO
(標準入力)は0, STDOUT_FILENO
(標準出力)は1, STDERR_FILENO
(標準エラー)は2と定義されています。 それぞれ標準入力、標準出力、標準エラーはUNIXで0, 1, 2と定義されています。 標準入力、標準出力、標準エラーもファイルとして扱われています。 筆者の環境(OS X version 10.9.5)では、標準入力は/dev/stdin
または/dev/fd/0
、標準出力は/dev/stdout
または/dev/fd/1
、標準エラーは/dev/stderr
または/dev/fd/2
というファイルで扱われているようです。ここで、/dev/fd/
中の数字がディスクリプタの番号と対応しています。
例
$ cat < /dev/fd/0 > /dev/fd/1
hoge
hoge
piyo
piyo
foo
foo
bar
bar
$
(赤字は標準入力からの入力、青字は標準出力への出力を意味します。
$
はプロンプトです。)当たり前のようにリダイレクトを使いましたが、今日はもう眠いので、それは次回説明しようかなと思ってます。 open
やclose
にも関連すると思います... リダイレクションに加えて、3以上のファイルディスクリプタについても書こうかなと考えてます。
参考文献
-
ブルース・ブリン 著・山下哲典 訳入門UNIXシェルプログラミングSB Creative