首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件描述符的可能值是什么?

文件描述符的可能值是什么?
EN

Stack Overflow用户
提问于 2013-08-29 09:27:21
回答 4查看 44.2K关注 0票数 19

我想知道文件描述符的有效值。

请让我解释一下。例如,我知道,当我在linux系统上使用#include <unistd.h>时,会调用一个打开文件以便读取:

代码语言:javascript
复制
int fileDescriptor;
fileDescriptor = open("/some/filename",O_RDONLY);

可能会发生错误,因此我收到-1。

顺便说一下,(-1)负一定有某种特殊的含义。是否所有其他值都是有效的文件描述符?也就是负的-2和-1023?

假设int是4个字节(sizeof(int)==4),那么

代码语言:javascript
复制
(-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?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-29 09:35:12

来自手册页

open()返回一个文件描述符,返回一个小的非负整数

然后:

如果发生错误,open()creat()返回新的文件描述符或-1。

票数 20
EN

Stack Overflow用户

发布于 2013-08-29 09:36:10

open失败时,它返回-10xffffffff。它没有任何意义,但open失败了:

成功完成后,函数将打开文件并返回一个非负整数,表示编号最低的未使用文件描述符。否则,将返回-1,并设置errno以指示错误。如果函数返回-1,则不得创建或修改任何文件。

故障原因存储在errno中,您可以读取它的值并检查它是否是EACCESEEXISTEINTR可能的故障原因之一。等等,或者只使用perror打印错误消息。

票数 3
EN

Stack Overflow用户

发布于 2013-08-29 09:33:53

下面是Linux 手册页所说的话:

如果发生错误,open()creat()返回新的文件描述符或-1 (在这种情况下,errno被适当设置)。

在出现错误时,其他系统可能返回其他负值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18507057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档