gpt4 book ai didi

c - fread 和 ferror 不要设置 errno

转载 作者:太空狗 更新时间:2023-10-29 16:05:52 26 4
gpt4 key购买 nike

我正在尝试检查 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 variable errno.

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

最佳答案

你不能从这里到达那里。

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

对于特定的系统级错误,您可以将其转为系统调用,可能会遇到诸如 IO 缓冲不佳/不存在等缺陷。 POSIX 可以在某种程度上拯救你。像read这样的电话, do 设置 errno 并有一组相当详细的可能结果。如果您使用的平台是 POSIX 兼容的,并且代码真的非常重要,需要了解,那么这可能是您的一个选择。

但是从 C 标准库中,除了被告知发生了错误之外,您不会找到太多信息。一般来说,你会发现你不需要更多。

关于c - fread 和 ferror 不要设置 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40214464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com