2015-07-26 3 views
0

У меня вопрос о использовании fseek() в C. Я знаю, что он может установить позицию смещения дескриптора файла, созданного fopen(). Но может ли он также установить позицию смещения вновь созданного файла? Более конкретно, могу ли я:fseek недавно созданный файл

FILE * pFile; 
    pFile = fopen ("myfile.txt" , "wb"); //myfile.txt doesn't exit before 
    fseek (pFile , 1024*1024*1024 , SEEK_SET); 
    fclose(pFile); 

Будет ли он создавать файл размером 1 ГБ и без контента? Или я должен хотя бы написать что-то, чтобы создать этот файл размером 1 ГБ?

+1

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

+2

Однако http://pubs.opengroup.org/onlinepubs/009695399/functions/fseek.html говорит, что «Функция fseek() должна позволять устанавливать индикатор позиции файла за пределы существующих данных в файле. данные позже записываются в этот момент, последующие считывания данных в пробеле должны возвращать байты со значением 0, пока данные не будут фактически записаны в промежуток ». однако что произойдет, если вы закроете файл, а затем снова откроете его? Будет ли это еще помнить? –

+2

Поиск будет просто перемещать позицию, но не будет расширять файл, если вы не напишете что-то в этой позиции. –

ответ

3

http://en.cppreference.com/w/c/io/fseek

POSIX позволяет стремится за пределы существующего конца файла. Если выходной сигнал , выполненный после этого поиска, любое считывание из зазора будет возвращать ноль байтов. Где поддерживается файловой системой, создается sparse file.

1

Вы можете сделать это, создать файл пробелов. любое чтение из зазора возвращает нулевые байты. система оптимизирует файловую систему.

Смежные вопросы