Я сейчас пишу реализацию DOD5220.22-M.Часть кода ниже предназначена для записи двоичного нуля в файл, пока диск не будет полностью заполнен.
Так что проблема в использовании statvfs, он обнаруживает 3800158208 байт (около 3,82 ГБ) доступного для записи пространства.Тем не менее, процесс записи остановится на 3.77gb, и он просто застрянет там навсегда.Диск отформатирован в APFS непосредственно перед этой операцией, поэтому он полностью пуст.
Как вы можете видеть, я пытаюсь использовать stream.fail () для обнаружения такой ошибки, но, похоже, это не работает вообще,Система MacOS работает под управлением g ++ 8 с C ++ 17
Чего мне не хватает?Обнаруживает ли 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;
}
}
}