Проверьте, достаточно ли места на диске для сохранения файла; зарезервировать это - PullRequest
4 голосов
/ 28 февраля 2012

Я пишу программу на C ++, которая будет печатать большие (2-4 ГБ) файлы.

Я бы хотел убедиться, что на диске достаточно места для сохранения файлов до того, как Я начну их записывать. Если возможно, я бы хотел зарезервировать это место.

Это происходит в системе на основе Linux.

Есть мысли о том, как это сделать?

Ответы [ 2 ]

7 голосов
/ 28 февраля 2012

Взгляните на posix_fallocate():

NAME
       posix_fallocate - allocate file space

SYNOPSIS

       int posix_fallocate(int fd, off_t offset, off_t len);

DESCRIPTION
       The function posix_fallocate() ensures that disk space is allocated for
       the file referred to by the descriptor fd for the bytes  in  the  range
       starting  at  offset  and continuing for len bytes.  After a successful
       call to posix_fallocate(), subsequent writes to bytes in the  specified
       range are guaranteed not to fail because of lack of disk space.

edit В комментариях вы указываете, что вы используете потоки C ++ для записи в файл.Насколько я знаю, не существует стандартного способа получить дескриптор файла (fd) из std::fstream.

Имея это в виду, я бы сделал предварительное выделение дискового пространства отдельным этапом процесса.Это будет:

  1. open() файл;
  2. использование posix_fallocate();
  3. close() файла.

Это можно превратить в короткую функцию, которую нужно вызвать, прежде чем вы даже откроете fstream.

1 голос
/ 29 февраля 2012

Используйте ответ aix (posix_fallocate()), но, поскольку вы используете потоки C ++, вам понадобится немного хака, чтобы получить дескриптор файла потока.

Для этого используйте код здесь: http://www.ginac.de/~kreckel/fileno/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...