繁体   English   中英

文件描述符返回错误的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM