stdin
POSIXは0、1、2stdout
を指定しますかstderr
、それとも単なる慣例ですか?他のシステムがこの規則から外れますか、それともこれは安全な仮定ですか?
答え1
POSIX仕様に標準化されているように見えますが、
POSIX.1-2017プロキシ経由unistd.h
ヘッダーは、ファイルストリームに対して次のシンボル定数を定義する必要があります。
STDERR_FILENO
stderrのファイル番号2.STDIN_FILENO
標準入力のファイル番号は0です。STDOUT_FILENO
1. 標準出力のファイル番号です。
しかし、
stderr
"、、、stdin
-stdout
標準I / Oストリーム"のPOSIXドキュメント状態、このボリュームPOSIX.1-2017はISO C規格に準拠しています。
これISO ISO/IEC 9899:201x 標準ただ説明すると、
定義済みの3つのストリームstdin、stdout、およびstderrは、プログラムの開始時に方向が指定されていません。
ISO Cはこれに対して比較的沈黙しているように見え、カーネルが、およびSTDOUT
というSTDERR
記述子に必要なものを割り当てることを許可しますSTDIN
。しかし、POSIX ドキュメントには、unistd.h
そのレベルで解決すべき問題が何であるかが明確に記載されています。
その他のオペレーティングシステム
答え2
シェルコマンド言語のPOSIX仕様、セクション2.7、リダイレクト、説明する
リダイレクトに使用される一般的な形式は次のとおりです
。N] リダイレクト作業ワード数字Nファイル記述子番号を指定するオプションの10進数。
0、1、2
の値は特別な意味と一般的な用途を持ち、呼び出される特定のリダイレクト操作によって暗示されます。標準入力、標準出力と標準エラー、それぞれ。 …︙
リダイレクトされた入力の一般的な形式は次
のとおりです。N ] <言葉そのうちオプションNファイル記述子記号を表します。この数値を省略すると、リダイレクトは標準入力(ファイル記述子0)を参照する必要があります。
...標準出力に言及する>
同等の段落もあります。1>