What are the possible values for file descriptors?

浪子不回头ぞ 提交于 2019-12-22 03:49:32

问题


I am interested to know the valid values which I can expect for a file descriptor.

Please let me explain a bit. I know that, for instance, when I use #include <unistd.h> on my linux system then a call to open a file for reading:

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

an error might occur and I receive -1 as a result.
Incidently the (-1) negative one must have somewhat of a special meaning. Is it that all other values are valid file descriptors? i.e. also negative ones like -2 and -1023?

Assuming that int is 4 bytes (sizeof(int)==4), then would

(-1) = 10000000 0000000 00000000 00000001

would be the only detectable invalid file descriptor? Would others like:

  • (0) = 00000000 0000000 00000000 00000000
  • (-2) = 10000000 0000000 00000000 00000010
  • (2) = 00000000 0000000 00000000 00000010

be ok? Since the file descriptor could store 4 bytes I could have therefore a maximum of (2^(8*4)-1) valid file descriptors and consequently this would be the maximum number of files I can have open, correct?

To put it plain again:

What should I expect a (valid) file descriptor to be?

any value but -1?


回答1:


From the man page:

open() returns a file descriptor, a small, nonnegative integer.

and then:

open() and creat() return the new file descriptor, or -1 if an error occurred




回答2:


When open fail, it returns -1, or 0xffffffff. It has no meaning but open failed:

Upon successful completion, the function shall open the file and return a non-negative integer representing the lowest numbered unused file descriptor. Otherwise, -1 shall be returned and errno set to indicate the error. No files shall be created or modified if the function returns -1.

The failure reason is stored in errno, you can read its value and check if it's one of the possible failures reasons EACCES, EEXIST, EINTR.. etc, or just use perror to print the error message.




回答3:


Here's what a Linux manual page says:

open() and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).

Other systems may return other negative values in case of error.




回答4:


Range of possible values of file descriptors is from 0 to 1023 for Linux system (32-bit or 64-bit system).

You cannot create a file descriptor with value more then 1023. In case of file descriptor of value 1024, it will return an error of EBADF (bad file descriptor, error no-9).

When a negative value of file descriptor is returned it indicates that an error has occurred.



来源:https://stackoverflow.com/questions/18507057/what-are-the-possible-values-for-file-descriptors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!