ファイル記述子に期待できる有効な値を知りたいです。
少し説明させてください。たとえば、Linuxシステムで_#include <unistd.h>
_を使用すると、読み取り用にファイルを開くための呼び出しが実行されることを知っています。
_int fileDescriptor;
fileDescriptor = open("/some/filename",O_RDONLY);
_
エラーが発生する可能性があり、結果として-1を受け取ります。
ちなみに(-1)負の数は特別な意味を持っているに違いありません。他のすべての値が有効なファイル記述子であるということですか?つまり、-2や-1023のような負の値もありますか?
Intが4バイト(sizeof(int)==4
)であると仮定すると、
_(-1) = 10000000 0000000 00000000 00000001
_
検出可能な唯一の無効なファイル記述子でしょうか?他の人が望む:
(0) = 00000000 0000000 00000000 00000000
_(-2) = 10000000 0000000 00000000 00000010
_(2) = 00000000 0000000 00000000 00000010
_大丈夫ですか?ファイル記述子は4バイトを格納できるので、最大(2 ^(8 * 4)-1)の有効なファイル記述子を持つことができ、その結果、これが開くことができるファイルの最大数になります。
もう一度わかりやすく説明すると、次のようになります。
(有効な)ファイル記述子は何であると期待すべきですか?
-1以外の値はありますか?
Linux マニュアルページ の内容は次のとおりです。
open()
およびcreat()
は、新しいファイル記述子を返すか、-1
エラーが発生した場合(この場合、errno
が適切に設定されます)。
他のシステムは、エラーが発生した場合に他の負の値を返す場合があります。
Linuxシステム(32ビットまたは64ビットシステム)の場合、ファイル記述子の可能な値の範囲は0〜1023です。
1023を超える値のファイル記述子を作成することはできません。値が1024のファイル記述子の場合、EBADFのエラー(不正なファイル記述子、エラー番号-9)が返されます。
ファイル記述子の負の値が返される場合は、エラーが発生したことを示します。