我目前正在编写 DOD5220.22-M 的实现。下面的代码用于将二进制零写入文件,直到磁盘完全装满。
所以问题在于使用 statvfs,它检测到 3800158208 字节(约 3.82gb)的可写空间。但是,写入过程将在 3.77gb 处停止,并且将永远停留在那里。驱动器在此操作之前被格式化为 APFS,因此它是完全空的。
如您所见,我尝试使用 stream.fail() 来检测此类错误,但这似乎根本不起作用。系统是运行 g++8 和 C++17 的 MacOS
我错过了什么?statvfs 检测到的可写空间是否比现有空间多,还是我做错了什么?
还有一种方法可以在每次迭代时不检查 stream.fail() 的情况下编写吗?
提前致谢。
{
statvfs("/Volumes/SECUREERASE", &space); // get space
size = space.f_frsize * space.f_bavail;
char zero = 0;
for (int i = 0; i < size; ++i){ // while space left, write
file.write(&zero, sizeof(char));
if(file.fail()){
break;
}
}
}