- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试检查 fread()
何时引发错误,因此我使用 ferror()
。
chunk = fread(buf, 1, 100, file);
if (ferror(file))
{
return errno;
}
但是,ferror()
手册页(man 3 ferror
,或者只是 man ferror
)说:
ERRORS
These functions should not fail and do not set the external variableerrno
.
那么,虽然 fread()
和 ferror()
没有设置 errno<,但我怎么知道文件被读取时发生的错误类型
?
最佳答案
你不能从这里到达那里。
fread
不会设置 errno
(如您所见),因此您无法真正确定特定错误状态;只有是一个。错误的确切性质通常取决于实现。没有基于 C 标准库的可移植方式来收集它。
对于特定的系统级错误,您可以将其转为系统调用,可能会遇到诸如 IO 缓冲不佳/不存在等缺陷。 POSIX 可以在某种程度上拯救你。像read
这样的电话, do 设置 errno
并有一组相当详细的可能结果。如果您使用的平台是 POSIX 兼容的,并且代码真的非常重要,需要了解,那么这可能是您的一个选择。
但是从 C 标准库中,除了被告知发生了错误之外,您不会找到太多信息。一般来说,你会发现你不需要更多。
关于c - fread 和 ferror 不要设置 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40214464/
::ferror(FILE *) 的行为是什么?和 std::ferror(FILE *)何时传递无效指针? C++ 标准仅指 C(参见 draft)。但是在 C 标准中没有提及 ferror关于无效
此示例中的 ferror 检查是检查两个 fprintf 是否有错误,还是只检查第二个? FILE * myout; if ((myout = fopen("Assignment 11.txt", "
我正在尝试生成多个线程,并为每个线程写入不同的文件(线程 1 写入文件 1,等等)。但是,在设置线程执行 ferror() 后,阻止我在主进程中执行进一步的文件操作。我尝试清除错误,但没有解决。这是我
如何获取 int ferror(FILE*) 返回的错误代码消息?对于 errno,有 char * strerror(int)。 ferror 返回的代码是什么?如果 char * strerror
一些从流中读取和写入的操作可能会在流中设置错误标志,可以使用 ferror(stream) 进行测试,而我很确定这一定是一个常见问题,我无法在 SO 或一般网络中找到所有可能的错误原因列表。什么会导致
哪些事件会导致 ferror() 返回非零值?在哪些事件发生后应该检查 ferror()? http://www.cplusplus.com/reference/cstdio/ferror/ 打开、阅
为什么下面的代码会出现段错误? #include #include int main() { FILE *file; file = fopen("text","r"); i
在标准 C 中,您如何可靠地检查写入标准 I/O 流的所有输出是否已成功保存到磁盘? C 标准规定 fclose成功时将返回 0,如果“检测到任何错误”,则返回 EOF。 但这是否意味着“在 fclo
我目前正在尝试将代码从使用 C 风格的 FILE* 解析文件移植到 C++ 风格的 istringstream。我的程序并行运行,我想 1) 仅在第一个 CPU 上读取文件,2) 将字符串形式的内容广
我有一个 iOS 项目,它使用了一些在编译时抛出大量警告的 CocoaPods。 在我的 Podfile 中,我有 inhibit_all_warnings! 防止警告出现在 Xcode build
我正在尝试检查 fread() 何时引发错误,因此我使用 ferror()。 chunk = fread(buf, 1, 100, file); if (ferror(file)) { r
所以我正在阅读一本关于用 C 编写 shell 的书,我想尝试用 C++ 编写它。我遇到了以下代码: for( ; ; ) { if (fputs(PROMPT, stdout) == EOF
我使用 cstdio 在 linux 上编写了一个 C++ 应用程序。它包含一个函数,该函数应该用随机数据覆盖整个设备。它被赋予一个文件名,在内存中创建随机数据 block ,并使用 fwrite()
一个简单的问题,我对答案有 99.99% 的把握,但寻求一些反馈,以便我对自己的理解有 100% 的信心。当fputc返回 EOF它只是在流错误正确吗?例如,假设我有一个非常小的空间要写入,并且已
我一直在学习如何制作我自己的 shell 的教程,但我已经被困了几天了。 两件事: 这段代码编译运行时,会随机出现段错误,我也想不通原因。 if 语句 `if (ferror != 0)` 似乎总是正
这个问题在这里已经有了答案: Is it possible to distinguish the error returned by fgets (2 个答案) 关闭 2 年前。 我写了这个 min
我是一名优秀的程序员,十分优秀!