文件描述符返回错误的值

时间:2017-04-20 14:32:35

标签: c

int fd;
fd=io->fd.open(filename,O_RDONLY|O_BINARY);
string_s=strerror(error);

结果是confusing.fd = 3,string_s是"没有这样的文件或目录"。 我确信文件名是可以的。但是为什么fd不是-1

2 个答案:

答案 0 :(得分:3)

如果函数调用未失败,则errno的值未定义。在检查errno之前,您必须检查功能是否失败。

答案 1 :(得分:2)

任何库调用都不会 errno 清除。 C11标准草案n1570说明如下(7.5p3):

  

初始线程中的errno值在程序启动时为零(其他线程中errno的初始值为不确定值),但任何库函数都不会设置为零。无论是否存在错误,errno的值都可以通过库函数调用设置为非零,前提是在本国际标准的函数描述中没有记录errno的使用。

也就是说,errno具有来自先前失败的系统调用的非零值; open成功。

您始终可以自己明确地将errno设置为0:

errno = 0;
fd = io->fd.open(filename, O_RDONLY | O_BINARY);

并且在成功进行库调用后它应保持为0。