Unixシステムには/dev/stdin、/dev/stdout、/dev/stderrがありませんか? [コピー]

Unixシステムには/dev/stdin、/dev/stdout、/dev/stderrがありませんか? [コピー]

質問に対する私の答え、そして彼へのコメントが私を読んだ。基本定義のPOSIX適合部分POSIX準拠が実際に必要かどうかを確認してください/dev/stdin/dev/stdout/dev/stderr

彼らはそうではないことがわかりました:

システムは非標準拡張を提供できます。これはPOSIX.1-2008では不要な機能であり、以下を含むことができますが、これに限定されません。 [...]特殊属性(例:と)を持つ追加の/dev/stdin文字/dev/stdout特殊/dev/stderrファイル

私が知る限り、これはただこの文書は規格に記載されています。

私はそれを実装していない1つの「システム」(実際には環境)にのみアクセスでき、それはWindowsのMinGWです(/dev私が知っている限りはまったくありません)。私が知る限り、すべての無料のUniceには、Windows用の新しいLinux環境であるCygwinとDarwin / macOSが含まれています。

私は商業ユニセスについてよく知りません。

/dev/stdin/dev/stdoutおよび/dev/stderrファイルシステムのファイルを実装していないPOSIXシステム、Unix、または今日でもまだ存在するいくつかのUnixのような環境がありますか?

答え1

/dev/stdin、/dev/stdout、/dev/stderr をファイルシステムのファイルとして実装しない POSIX システム、Unix、または Unix のような環境は、今日もまだ存在していますか?

はい、少なくとも以下の例のシステムによると、そうです。

私はこのシステムの専門家ではありませんが、AIX 6.1ではWikipediaが次のように主張しています。

The Open GroupのUNIX 03規格(https://en.wikipedia.org/wiki/IBM_AIX)

これらのファイル記述子は、私がアクセスできるインストールでは実装されていないようです。ご覧のとおり、bashを使用すると、リダイレクト目的で実際に存在するかのように動作します。

$ uname -s
AIX
$ echo $SHELL
/usr/bin/ksh
$ ls -al /dev/stdin
ls: 0653-341 The file /dev/stdin does not exist.
$ ls -al /dev/stdout
ls: 0653-341 The file /dev/stdout does not exist.
$ ls -al /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
$ echo foo >/dev/stderr
The file access permissions do not allow the specified action.
ksh: /dev/stderr: 0403-005 Cannot create the specified file.
$ bash
bash-4.2$ ls /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
bash-4.2$ echo foo >/dev/stderr
foo

他のコメント者が述べたように、次の質問もいくつかの興味深い情報を提供します。

答え2

元の投稿の後にこの記事を投稿しましたが、将来の視聴者のためにこのコメントを追加する必要があると思いました。

AIX 6.1システムで/dev/stdoutに書き込むと上記と同じ結果が得られますが、AIX 7.1システムでは期待どおりに機能するため、/dev/stdoutのサポートが追加されているようです。

AIX 6.1(ksh93)

echo "Hello" > /dev/stdout                                            
ksh93: /dev/stdout: cannot create.
[The file access permissions do not allow the specified action.].

AIX 7.1(ksh93)

echo "Hello" > /dev/stdout
Hello

関連情報