あなたの質問は2つに分けることができます:
POSIX ファイル記述子はなぜint
ですか?
すでに確立されたツールやライブラリのほとんどのものと同様に、答えはおそらく歴史的な理由です。ジェームズの答えはこれを指摘しています。
ファイル記述子を不透明にすることはおそらく良い考えですが、あなたが言及した理由ではありません。型を不透明にすることは、いくつかのパラメーターに基づいて異なる型を持つのに適しています。たとえば、一部のシステムではlong long
as ファイル記述子が必要な場合があります。しかし、実際には、20 億個のファイルを同時に開いている必要がある人はどこにもいないため、この存在しない問題を修正しようとする人は誰もいません。
一方、typedef int file_descriptor;
上記の問題のいずれも修正されないようなもの:
これは、他の整数と混同しやすいことを意味します...
変数を混同している場合は、悪いニュースがあります。file_descriptor
とは同じ型であるため、コンパイラはどちらも役に立ちませんint
。したがって、一方に対する操作はもう一方に対して許可されます。
...そして、それらが何であるか、それらが何を指しているのか、それらが開いているかどうかなどをコンテキストなしで知る方法はありません.
どちらでもそれを行うことはできませんFILE
。のように、求める情報を照会して返す関数があるのはそのためですFILE
。typedef
タイプを ing しても、追加情報は得られません。
POSIX に C++ ラッパーがないのはなぜですか?
要するに、Microsoft を除いて、C++ に熱中するオペレーティング システム開発者はいないからです。Windows はかろうじて POSIX でさえあるため、Microsoft が POSIX を改善しようとする望みはありません。POSIX準拠の他のオペレーティングシステムには、事実上のシステムプログラミング言語としてC APIがあります(nmが言うように、ほとんどすべての言語がCにバインドできるためです)。
実際、C++ はアプリケーション開発者の間では人気がありますが、システム プログラマーの間ではそれほど人気がありません。POSIX 委員会も特に C++ には関心がないようです。そのため、POSIX API に関して C と C のみのソリューションと引数が表示されます。また、 POSIX は特に UNIX のインターフェイスを標準化するために作成されたことにも注意してください。これは C で記述されており、その最も重要な子孫の 1 つである Linux も C に強く結び付けられています。