標準入出力

標準入出力とは

標準入力
コマンドのためにデータ入力用として用意されているデータの通り道のことである。
普通は標準入力の入力元はキーボードになる。
データを入力する必要のあるコマンドの多くでは引数にファイル名を付けないと標準入力からデータを入力する。
C言語では、標準入力からscanfによってデータを読み込む。
標準出力
コマンドがデータを出力するために用意されているデータの通り道のことである。
普通は標準出力の出力先はウインドウ(コンソール)になる。
lsその他の多くのコマンドが結果の出力を標準出力に出力する。
C言語では、printfによってデータ標準出力に出力する。

リダイレクションとパイプ

リダイレクション
標準入出力をファイルに切替える機能である。
例えば、ウインドウに出力されるデータをリダイレクションによってファイルに書き込んで 保存しておくことにより、いつでもそのデータを後で利用できるようになる。
# コマンド > ファイル
コマンドの標準出力をファイルに切替える
# コマンド < ファイル
コマンドの標準入力をファイルに切替える
パイプ
あるコマンドの標準出力を他のコマンドの標準入力に切替える機能である。
パイプを使って2つ以上のコマンドを組み合わせることによって今まで存在しなかった機能を簡単に実現することができる。
# コマンド1 | コマンド2
コマンド1の標準出力をコマンド2の標準入力に切替える

パイプは二つ以上使うことによって3つ以上のコマンドを接続することができる。
また、リダイレクションとパイプは同時に使用できる。

例1 ( リダイレクション )

あるコマンド(この場合はecho)によって ウインドウに出力されるデータ(testという文字列) を リダイレクション( > )によってdataというファイルに書き込んでいる。

# echo test       <- echoは引数の文字列を標準出力に出力するコマンド
test
# echo test > data       <- その出力をdataという名前のファイルに書き込む
# cat data        <- dataの中身を出力すると
test              <- echoの出力が書き込まれている
# cat             <- catだけで実行
I am a boy        <- 入力が標準入力(キーボード)になる
I am a boy        <- 出力が標準出力に出力される
Ctrl+d            <- Ctrl+dで入力終り
#

例2 ( パイプ )

例えば、あるディレクトリのなかにあるファイルの個数を数えたいと思った時、どのようにすれば良いだろうか。 lsコマンドにはファイルの個数を数える機能はない。 しかしlsコマンドではファイル名は標準出力に出力されているのだから、その個数を他のコマンドで数えれば良い。 そのために入力されたデータの単語数を数えてくれるwcというコマンドを使用する。 この互いに関係の無い2つのコマンド(ここではlswc)をパイプ( | )で組み合わせることによって今まで存在しなかった機能(ファイルの個数を数える)が実現できる。

# ls             <- lsはファイル名を標準出力に出力するコマンド
data1 data2 data3
# wc data1       <- wcは引数にファイル名があるとそのファイルの行数・単語数・文字数を標準出力に出力するコマンド
 32 64 182       <- data1は32行、単語64個、文字数182個(スペース、改行を含む)
# wc             <- wcだけで実行する
This is a pen    <- 入力がキーボード(標準入力)になる
Ctrl+d           <- Ctrl+dで入力終り
 1 4 14          <- This is a penの行数(1)、単語数(4)、文字数(14)
# ls | wc        <- lsコマンドの出力結果をパイプを通してwcコマンドへ送る
 1 3 18          <- 2番目の数字がファイルの個数
#

参考


Prev | Next
Home | Contents
abe@injapan.net