stdin-stdout-stderr
アプリケーションログの出力先としてstdout
を指定することがある。理解を深めるためにLinuxの標準入力と標準出力についてまとめておきたい。
概要
- Linuxにおけるプログラムの入出力の仕様
- あらゆるコマンドやプログラムは入力であればstdin、出力であればstdout,stderrを介してLinux OSに入出力する
- それぞれ、デフォルトではキーボードとスクリーン(ターミナル)に接続されている
標準入力(stdin:0) ---> プログラム ---+---> 標準出力(stdout:1)
|
+--> 標準エラー出力(stderr:2)
- Linux OSでは、ファイル記述子(ファイルディスクリプタ)によって、それぞれは疑似ファイルとして扱われる
以下の記事がとてもわかりやすい
https://doi-t.hatenablog.com/entry/2015/03/29/225239
ファイル記述子(ファイルディスクリプタ)
カーネルの中にはストリームを管理するデータ構造がる。そのデータ構造上のkeyにあたるもの。
整数値(int型)で、ストリームをプロセス(プログラム)から隠蔽し、プロセスからは番号でストリームを指定させる。

stdin
- プログラムに入力されるデータ(テキストが多い)
- リダイレクトしない限り、標準入力はプログラムを起動した端末のキーボードになっている
- ファイル記述子は0
stdout
- プログラムが出力するデータのストリーム
- 標準出力はプログラムを起動した端末のディスプレイになっており、リダレクトにより簡単に宛先を変更することができる
- ファイル記述子は1
stderr
- エラーメッセージなどを出力するためのもう一つの出力ストリーム
- 標準出力とは独立しているので、片方だけをリダイレクトすることも可能
- デフォルトではプログラムを起動した端末のディスプレイになっている
- ファイル記述子は2
参考
- https://doi-t.hatenablog.com/entry/2015/03/29/225239
- https://minegishirei.hatenablog.com/entry/2023/08/26/111234
- https://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0