Fseek и написать прошлое EOF - PullRequest
       35

Fseek и написать прошлое EOF

2 голосов
/ 28 апреля 2020

Давайте сначала предположим, что у меня есть 20-байтовый двоичный файл, состоящий из 5 целых чисел. Теперь допустим, что я пытался:

fseek(fp, 2*sizeof(int), SEEK_END)

и пытался позвонить:

fwrite(&i, sizeof(int), 1, fp);

Возможно ли это вообще?

Если это возможно, будет ли новый двоичный файл будет иметь размер 32 или он просто будет иметь размер 24? Если значение равно 32, каково содержимое двоичного файла с позиций 20–27?

1 Ответ

4 голосов
/ 28 апреля 2020

Согласно this :

  • Реализациям библиотек разрешено не поддерживать SEEK_END (), поэтому код, использующий их, не имеет реальной стандартной переносимости ).

И здесь :

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

В моей тестовой системе seeking past SEEK_END заполняет оставшуюся часть файла нулевыми байтами до нового файла указатель.

...