gpt4 book ai didi

c - 在 Linux fwrite 命令中没有设置 errno,如何在失败情况下获得正确的 errno

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:10 25 4
gpt4 key购买 nike

来自 linux 中 fwrite 的手册页,

描述 函数 fread() 从 stream 指向的流中读取数据的 nmemb 元素,每个 size 字节长,并将它们存储在 ptr 给定的位置。

   The function fwrite() writes nmemb elements of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr.

For nonlocking counterparts, see unlocked_stdio(3).

返回值 成功时,fread() 和 fwrite() 返回读取或写入的项目数。只有当 size 为 1 时,这个数字才等于传输的字节数。如果发生错误,或者到达文件末尾, 返回值是一个短项目计数(或零)。

   fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred.

现在我的问题是:假设由于驱动器上没有空间而导致 fwrite() 系统调用失败。我们怎样才能得到它的errno。因为 fwrite 没有在失败的情况下设置 errno。

以防万一 errno 是:头文件定义了整型变量errno,它由系统调用和一些库函数设置error 表示出了什么问题。

从编程语言的角度来说: C

最佳答案

fwrite() 不是直接的系统调用,通常所有通过 FILE * 指针完成的 I/O 都会被缓冲。无法保证对 fwrite() 的调用会在此时实际执行写入。错误可以立即返回,或者稍后使用 FILE * 调用函数返回。但是,fclose() 将写出所有剩余的缓冲数据,如果写入不成功,将返回错误。

总而言之,您需要在每次调用 fwrite()fread() fclose( )。如果你想避免到处做错误检查,你可以随时调用 ferror() 来检查一个 FILE * 的错误状态。

变量errno是在错误发生时设置的,因为C库内部调用了read()write(),那些设置errno 在错误的情况下。

关于c - 在 Linux fwrite 命令中没有设置 errno,如何在失败情况下获得正确的 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344556/

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