[英]the file descriptor return the wrong value
int fd;
fd=io->fd.open(filename,O_RDONLY|O_BINARY);
string_s=strerror(error);
结果是令人困惑的。fd= 3,并且string_s是“没有这样的文件或目录”。 我确定filename可以,但是为什么fd不是-1
如果函数调用没有失败,则errno
的值是undefined 。 在检查errno
之前,必须先检查函数是否失败。
errno
任何库调用清除 errno
。 C11标准草案n1570表示以下内容( 7.5p3 ):
程序启动时,初始线程中errno的值为零(其他线程中errno的初始值为不确定的值), 但是任何库函数都不会将其设置为零 。 可以通过库函数调用将errno的值设置为非零,无论是否存在错误,只要在本国际标准的函数描述中未记录errno的使用即可。
也就是说, errno
具有来自先前失败的系统调用的非零值; open
成功。
您始终可以自己将errno
显式errno
为0:
errno = 0;
fd = io->fd.open(filename, O_RDONLY | O_BINARY);
成功调用库后,它应保持为0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.