文件描述符返回错误值

问题描述:

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

结果是confusing.fd = 3,而string_s是“没有这样的文件或目录”。 我相信,文件名是所有right.But为什么fd是不是-1文件描述符返回错误值

+0

如果文件名称没问题,为什么要fd是-1? – Gerhardh

如果一个函数调用不会失败的errno不确定。在检查errno之前,您必须检查功能是否失败。

+0

如何检查C语言的开放函数?io-> fd.open只是C的函数。 – user7896331

+1

@ user7896331通过检查函数是否返回了'-1'。例如。 'if(fd == -1){printf(“%s \ n”,strerror(errno)); }' –

errno从来没有通过任何库调用清除。该C11 n1570标准草案说以下(7.5p3):

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

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

您可以随时设置errno 0明确自己:

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

和成功的库调用后,应保持0。