gpt4 book ai didi

c++ - 为什么 ferror() 在设备上没有剩余空间时返回 EPERM - 我希望 ENOSPC

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

我使用 cstdio 在 linux 上编写了一个 C++ 应用程序。它包含一个函数,该函数应该用随机数据覆盖整个设备。它被赋予一个文件名,在内存中创建随机数据 block ,并使用 fwrite() 将它们一个接一个地写入文件。如果设备已满,函数应该返回。如果有不同的写错误,应该抛出异常。因此,当发生错误时,我会询问 ferror() 并想识别这是否是“磁盘已满”——一个不同的错误。我希望在磁盘已满时获得 ENOSPC。但是该函数写入磁盘,当磁盘已满时,ferror() 返回的值为 1(即 EPERM)。另一方面,perror 打印出正确的“设备上没有剩余空间”。这是我的 C++ 库中的错误吗?或者 EPERM 是正确的错误代码吗?如果是正确的错误代码,EPERM 是否仅在磁盘已满时才返回,因此适合识别此特定错误?

最佳答案

ferror 仅告诉您流中是否存在错误。要查看实际错误是什么,您必须检查 errno

perror 检查 errno,这就是它打印正确错误消息的原因。

关于c++ - 为什么 ferror() 在设备上没有剩余空间时返回 EPERM - 我希望 ENOSPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042161/

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