恐惧和恐怖没有设置errno

时间:2016-10-24 09:03:01

标签: c fread errno ferror

我正在尝试检查MovieClip(this.root).gotoAndPlay(1, "Scene 1"); 何时引发错误,因此我使用fread()

ferror()

但是,chunk = fread(buf, 1, 100, file); if (ferror(file)) { return errno; } 手册页说:

  

错误这些函数不应该失败,也不要设置外部变量errno。

那么,虽然ferror()fread()没有设置ferror(),但我怎么知道文件读取时发生的错误类型?

2 个答案:

答案 0 :(得分:3)

你无法从这里到达那里。

fread未设置errno(正如您所发现的那样),因此您无法真正确定特定的错误状态;只有一个。错误的确切性质通常取决于实现。没有基于C标准库的可移植方式来收集它。

对于特定的系统级错误,你可以将它丢到系统调用,可能会遇到像一路上差的/不存在的IO缓冲这样的陷阱。 POSIX可以在某种程度上帮您解决问题。调用read设置errno,并有一套相当详细的可能结果。如果您正在使用的平台符合POSIX标准且代码对于了解其中非常重要,那么这可能是您的选择。

但是从C标准库中,除了被告知错误发生之外,你不会发现太多东西。一般来说,你发现自己并不需要更多。

答案 1 :(得分:1)

这些功能不使用errno,所以你不应该使用fread()

值得注意的是,您可以从fread()的返回值判断一切是否顺利。如果nmemb的返回值与传递的chunk = fread(buf, 1, 100, file); if (chunk != 100) { // If fread() returns a number different to the nmemb parameter, either error or EOF occured if (ferror(file)) { printf("Error occured while reading file."); return -1; // Or what ever return value you use to indicate an error } } 参数(在您的情况下为100)不同,那么您要么到达文件的末尾,要么在读取它时发生错误(source)。所以只测试那种情况:

完全放弃使用errno:

{{1}}