へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

UNIX ファイルディスクリプタに触れてみる その1

システムコールで遊んでみる その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
$
(赤字は標準入力からの入力、青字は標準出力への出力を意味します。$ はプロンプトです。)

当たり前のようにリダイレクトを使いましたが、今日はもう眠いので、それは次回説明しようかなと思ってます。 opencloseにも関連すると思います... リダイレクションに加えて、3以上のファイルディスクリプタについても書こうかなと考えてます。

参考文献
  • ブルース・ブリン 著・山下哲典 訳
    入門UNIXシェルプログラミング
    SB Creative