int fd;
fd=io->fd.open(filename,O_RDONLY|O_BINARY);
string_s=strerror(error);
结果是confusing.fd = 3,string_s是"没有这样的文件或目录"。 我确信文件名是可以的。但是为什么fd不是-1
答案 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。