試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

標準入出力についてとcatコマンドを用いたテスト

  1. 標準入出力の概要
  2. catコマンドによる既定の標準入力と標準出力のテスト

標準入出力の概要

コマンドが実行されると、1系統の入力「標準入力」と2系統の出力「標準出力」「標準エラー出力」が確保される。既定では標準入力はキーボードからの入力、標準出力と標準エラー出力は端末へのメッセージ出力となっている。これらはまとめて標準入出力と呼ばれることがある。
この入出力は「パイプ」というものを用いるとあるプロセスの出力を別のプロセスの入力としてつなぐことができるようになっていて、(解析・加工などの後に)更に別のプロセスへ渡すといったこともできる。シェル上の標準的な指定では(書き込み側の)標準出力と(読み取り側の)標準入力が接続されるが、指示しだいで標準エラー出力との接続も可能。
2系統用意されている出力の内、標準出力は標準的な用途(通常メッセージの表示)で行われ、標準エラー出力はエラーメッセージなどの出力用途で標準出力とは別に用意されている。標準エラー出力には出力が即座に行われる(バッファされない)*1という特徴もあり、これもエラー表示用途に役立っている。
また、指示により、標準入力にファイルを指定して読み込ませたり標準出力にファイルを指定して出力を書き出させたりすることもでき、これはリダイレクトと呼ばれる。
標準入出力はファイルと同様「ファイル記述子」というもので扱われ、扱い方もファイルと同じようにできる。標準入出力のファイル記述子値はそれぞれ決まっている。
標準入出力
名前用途ファイル記述子の値
標準入力入力されるデータ0
標準出力通常のメッセージ出力1
標準エラー出力エラーなどのメッセージ出力2

catコマンドによる既定の標準入力と標準出力のテスト

catコマンドは引数がないときに標準入力を標準出力にそのまま出力する。

$ cat[Enter]

ここで適当な文字列を入力してCtrl+Dを押すと標準入力を渡す。ここでは「TEST」と入力後Ctrl+Dを押す(終端であることを知らせる)*2ことにする。

$ cat
TEST[Ctrl+D]

すると

$ cat
TESTTEST[カーソル位置]

のように端末に今入力した文字列が出力される。更に「12345」と入力しCtrl+Dを押すと

$ cat
TESTTEST12345[Ctrl+D]

最初のときと同様

$ cat
TESTTEST1234512345[カーソル位置]

のように出力される。文字列(ここでは「ABC」)を入力した後Enterを押した場合は

$ cat
TESTTEST1234512345ABC[Enter]

そこで改行しつつ、そこまでの文字列が表示される。

$ cat
TESTTEST1234512345ABC
ABC
[カーソル位置]

何も入力していない状態でCtrl+Dを押すと終了する。

$ cat
TESTTEST1234512345ABC
ABC
[Ctrl+D]
$ 

*1:これに対し標準出力は標準ではある程度まとめて溜めてから出力される仕組みになっている・プログラム側でflushという操作を行ってそこまでの強制書き出しを行うようにすることは可能

*2:このキーによりEOFというコードが渡され、コマンド側が今入力された文字列を処理する