Понадобилось срочно прочитать из бинарного файла большое количество записей следующей структуры: 3 32-разрядных целых, текстовая строка произвольной длины с 0 на конце. Первое целое — длина данной записи в байтах. После последней записи идёт известное число многократно больше длины любой записи.
Набросал следующую программу:
int fd;
int recordsize, data1, data2;
char filename[1000];
int indexposition;
...
fd = open( "SOMEFILE.XYZ", O_RDONLY);
lseek( fd, indexposition, SEEK_SET);
read( fd, &recordsize, 4);
while ( recordsize < infostart ) {
//lseek( fd, indexposition+4, SEEK_SET);
read( fd, &data1, 4);
//lseek( fd, indexposition+8, SEEK_SET);
read( fd, &data2, 4);
//lseek( fd, indexposition+12, SEEK_SET);
read( fd, filename, recordsize - 12);
...
//indexposition += recordsize;
//lseek( fd, indexposition, SEEK_SET);
read( fd, &recordsize, 4);
};
Под 32-разрядным линуксом с GCC 4 в таком виде нормально собирается и работает. Под виндоуз с GCC 3 нормально читает 1-ю запись и зацикливается в районе 2-ой—3-ей, но если раскомментировать строки с lseek — работает.
Кто-нибудь может объяснить причину?
В пропущенных частях никакого доступа к диску нет.