#include <stdio.h>
int main ()
{
FILE * f = fopen ("/tmp/x.txt", "w");
fseek (f, 3, SEEK_SET);
fwrite ("c", 1, 1, f);
fseek (f, 10, SEEK_SET);
fwrite ("j", 1, 1, f);
fclose (f);
}
Когда это работает, hexdump /tmp/x.txt равен
00 00 00 63 00 00 00 00 00 00 6a | ...c.... ..j
fseek основан на lseek, который способен распознавать "дыры" в файлах (диапазоны нулей, которые еще не были записаны), но соответствующая файловая система должна поддерживать это.
Из справочной страницы мне не совсем ясно, что отверстия должны быть строго нулевыми, но на практике это так.