Mah*_*rak 3 c errno fread ferror
我正在尝试检查何时fread()引发错误,因此我使用ferror()。
chunk = fread(buf, 1, 100, file);
if (ferror(file))
{
return errno;
}
Run Code Online (Sandbox Code Playgroud)
但是,ferror()手册页说:
错误这些函数应该不会失败,并且不要设置外部变量errno。
所以,我怎么能知道,当文件被读取时出现错误类型,但fread()并ferror()没有设置errno?
您不能从这里到达那里。
fread没有设置errno(如您所发现的),因此您无法真正确定某个特定错误状态的太多信息;只有有是一个。错误的确切性质通常取决于实现。没有基于C标准库的可移植方式来收集它。
对于特定的系统级错误,您可以将其归类为系统调用,可能会遇到一些陷阱,例如整个过程中IO缓冲不佳/不存在。POSIX可以为您提供一些帮助。呼叫喜欢read,做一套errno,并有相当详细的一系列可能的结果。如果您使用的平台兼容POSIX,并且代码对于了解是至关重要的,那么这可能是您的选择。
但是从C标准库中,除了被告知发生了错误之外,您将发现不了什么。通常,您会发现自己并不需要更多。