Можно ли создать файл с фиксированным размером в Linux? - PullRequest
1 голос
/ 23 августа 2011

Мне нужна функция, которая создаст файл с фиксированным размером в Linux. Такие функции, как truncate или fopen,fseek,fclose, не являются решением, поскольку они заполнят открытый файл нулями, но в этом нет необходимости, и у меня нет на это времени. Так есть ли какая-нибудь функция, которая будет открывать только файл фиксированной длины и не заполнять буфер?

Заранее спасибо.

1 Ответ

10 голосов
/ 23 августа 2011

Системный вызов truncate(2) не заполняет файл нулями .Он просто увеличивает указанный размер файла и оставляет в нем дыры.

Когда вы читаете из него, вы do получаете нули, но это просто удобство ОС.

Функции truncate () и ftruncate () приводят к усечению обычного файла с именем path или ссылкой на fd до размера байтов с точной длиной.

Если файл ранее был короче, онрасширенный, а расширенная часть читается как нулевые байты ('\ 0') .

О дырах (из TLPI):

Существованиедырок означает, что номинальный размер файла может быть больше, чем объем дискового пространства, которое он использует (в некоторых случаях, значительно больше).

Файловые системы и дыры:

Вместо того, чтобы выделять блоки пустых байтов для дыр в файле, файловая система может просто пометить (со значением 0) соответствующие указатели в i-узле и в косвенном указателеблоки, чтобы указать, что они не относятся к фактическимдисковые блоки.

Как отмечает По Йоханссону , это зависит от файловой системы.

Большинство собственных файловых систем UNIX поддерживают концепцию дыр в файлах, но многие неродные файловые системы (например, Microsoft VFAT) этого не делают.В файловой системе, которая не поддерживает дыры, явные нулевые байты записываются в файл.

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