$ tty
/dev/tty0
存在する
$cat
ユーザー空間では、catプロセスは標準入力が/ dev / tty0ファイルから入力を受け取るのを待ちます。
存在しないファイルfffを一覧表示すると、
ls /fff > file1
ls cannot find file :file1 Access denied
stdout が /dev/tty0 ではなく file1 にリダイレクトされますが、存在しないファイルのエラーは、stderr ファイル記述子を介して /dev/tty0 に表示されます。
質問:
stderrが/dev/tty0にstdoutを書くのと似ている場合、stderrの目的は何ですか?
/dev/tty0にエラーを記録するためにファイル記述子stderrを維持するUNIX / Linuxのアイデアは何ですか?
答え1
エラーストリームから出力ストリーム(STDOUT、ファイル記述子1)を分離するには、STDERR(ファイル記述子2)が必要です。
分離しないと、有効な出力とエラーを区別できません。
ケースが示すように、両方のストリームは端末に接続されており、ユーザーdup(2)
スペースで簡単なファイル記述子操作を使用して簡単に区別または操作できます。
たとえば、STDOUTを1つのファイルに送信し、STDERRを別のファイルに送信する場合:
my_command >stdout.log 2>stderr.log
答え2
stdoout
各UNIXプロセスは、書き込み専用、stdin
読み取り専用(私が思うように)、および非ブロックの読み取り/書き込み展開で、起動時にstderr
最大1つのライン出力バッファが開いていると予想されます。
stderr
主に消費者にすぐに出力を提供するために使用され、エンドユーザーインターフェースアプリケーションに大きく依存します。