標準入力・標準出力/エラー出力


本ページでは標準入出力とエラー出力について書いていきます。
Linuxに関してですが、個人的な慣れと共にJavaでの説明も混じっています。

コンピュータも、
何かアクションが無いと何も始まらないのは同じのようで…
やることは決まっていても、材料が無ければ何も作れません
 例:身長・体重からBMIを算出→データが無いと計算できない など

データストリーム:コンピュータの、入力→処理→出力 の一連の流れ

入力は標準入力の1つ、
出力は標準出力と標準エラー出力の2つ

標準入力 stdin

指定をしていないときはキーボードからの入力。
ファイルを指定することもできる 

前述のBMI算出例だと、できれば大人数のデータから調べたいですよね。
→リダイレクトの項目もご覧ください。

標準出力 stdout

「出力する」というコマンドの時やコマンド実行の過程で通常処理が問題ない場合に端末に出力。
指定をしていないときはコンソール画面

上記標準入力・出力はまとめて標準入出力(stdio)とも。

標準エラー出力 stderr

コマンド実行時に通常処理が行われず、エラーになった場合の出力に使われます。
端末画面で標準出力と大差ないように出力されます。


該当ファイル・ディレクトリが無い場合、
このような「そのようなファイルやディレクトリはありません」エラーが出ます。
ちなみに、コマンド:---の---の数字はアドレスを指していてエラーになっているようでした。

所感

「標準」というのは最低限、備え付けの、のような印象を持ちました。standard in/out~

Javaのプログラミング的にも

プログラム実行時に指定するものではなく、プログラムを実行して入力の待ちになった時の方です。
Scannerクラス、InputStreamクラス、一番身近かもしれないSystemクラスのSystem.out,System.inが標準入力に当たるようです。

実行して入力が待ちになった状態からデータセットを逐一入力すると、データセットが多い場合には面倒、ミスも多くなります。
ファイルにデータセットを記述したものを入力元として読み込みたいときにこのリダイレクトを使用します。

リダイレクト

以下Linuxでのリダイレクトです。

標準入力をファイルで行う

コマンド < データファイル名

 入力したいデータファイルを用いる場合は“<”を使います。

標準出力をファイルに行う

コマンド > 出力したいファイル名

 実行結果をファイル形式に出力したい場合には“>”を使います。

出力したいファイル名がすでに存在している場合は、上書きされてしまうので
">"の代わりに">>"を使うと、追記されます。

シェルの種類によっては、>ではなく">&",割り当て番号を使うものもあります。

どちらも、コマンドに入る・出るイメージそのままで知っていれば利用しやすいですよね。

割り当て番号

以下の番号でOSが入出力を認識できます。
標準入力   :0
標準出力   :1
標準エラー出力:2

これを用いると、実行結果とエラー出力を分けることができます。

コマンド 1> 実行結果ファイル名 2>エラー用ファイル名

両方使用するとこのような記述になるようです。