web-dev-qa-db-ja.com

/ dev / stdin、/ dev / stdout、/ dev / stderrのないUnixシステム?

質問に対する回答 とそのコメントにより、 基本定義のPOSIX適合性セクション を読んで_/dev/stdin_、_/dev/stdout_および_/dev/stderr_は、POSIX標準に準拠するために実際に必要でした。

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

システムは非標準の拡張機能を提供する場合があります。これらはPOSIX.1-2008で必要とされない機能であり、次のものを含む場合がありますが、これらに限定されません:[...]特殊なプロパティ(_/dev/stdin_、_/dev/stdout_、および_/dev/stderr_)

私が見つけることができる限り、これは標準でこれらのファイルについて言及しているonlyです。

私はそれらを実装していない1つの「システム」(実際には環境)にしかアクセスできません。それはWindows上のMinGWです(私が知る限り_/dev_はありません)。私の知る限り、すべての無料のUnicesにはそれらがあり、Windowsの新しいLinux環境であるCygwinとDarwin/macOSにもあります。

私は商用のUnicesに精通していません。

ファイルシステム内のファイルとして_/dev/stdin_、_/dev/stdout_、および_/dev/stderr_を実装していないPOSIXシステム、Unix、または今日説明されているUnixライクな環境はありますか?

13
Kusalananda

ファイルシステムのファイルとして/ dev/stdin、/ dev/stdout、/ dev/stderrを実装していないPOSIXシステム、Unix、または今日説明されているUnixライクな環境はありますか?

はい、少なくとも以下の私のシステム例では。

私はこのシステムの専門家ではありません。ただし、ウィキペディアが主張するAIX 6.1は次のとおりです。

the Open GroupのUNIX 03標準に認定されたバージョンを持つ5つの商用オペレーティングシステムの1つ( 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

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

5
Steven D

私は最初の投稿の後でよく投稿していますが、将来の視聴者のためにこのコメントを追加したいと思いました。

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
2
Scavenger