17

ファイル記述子に期待できる有効な値を知りたいです。

少し説明させてください。たとえば、#include <unistd.h>Linuxシステムで使用すると、読み取り用にファイルを開く呼び出しが行われることを知っています。

int fileDescriptor;
fileDescriptor = open("/some/filename",O_RDONLY);

エラーが発生する可能性があり、結果として -1 が返されます。
ちなみに、(-1) の負の値には特別な意味があるはずです。他のすべての値は有効なファイル記述子ですか? つまり、-2 や -1023 のような負のものも?

sizeof(int)==4int が 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 以外の値はありますか?

4

4 に答える 4

18

マニュアルページから:

open()小さい負でない整数であるファイル記述子を返します。

その後:

open()creat()新しいファイル記述子を返すか、エラーが発生した場合は -1を返します

于 2013-08-29T09:35:12.420 に答える
2

open失敗した場合は、-1またはを返します0xffffffff。意味はありませんがopen失敗しました:

正常に完了すると、関数はファイルを開き、最小番号の未使用のファイル記述子を表す負でない整数を返します。それ以外の場合は、-1 が返され、エラーを示すために errno が設定されます。関数が -1 を返す場合、ファイルは作成または変更されません。

失敗の理由は に保存されerrnoます。その値を読み取って、考えられる失敗の理由の 1 つであるかどうかを確認しEACCESたりEEXIST、エラー メッセージを表示しEINTRたりすることができます。perror

于 2013-08-29T09:36:10.937 に答える
1

Linuxのマニュアルページには次のように書かれています:

open()creat()新しいファイル記述子を返す-1か、エラーが発生した場合 (その場合、errno適切に設定されます)。

他のシステムは、エラーの場合に他の負の値を返すことがあります。

于 2013-08-29T09:33:53.687 に答える