РЕШЕНИЕ НА НИЖНЕЙC: FSEEK() не указывает на определенное число байт
Я работаю над программой IP пересылки. После чтения одного поля заголовка я использую fseek()
, чтобы указать указатель файла на начало следующего заголовка IP-заголовка. Только у меня есть текущее значение положения 20 и смещение 40, но когда я fseek()
он остается под номером 20. Байт
struct line {
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
};
struct line l1;
long datagram_length = 0;
int current_position = 0;
ip_packets = fopen("ip_packets", "r+");
fread(&l1, 4, 1, ip_packets);
header_length = l1.a & 0x0f;
header_length *= 4;
printf("Header length = %u\n", header_length);
datagram_length = l1.c * 256 + l1.d;
printf("Datagram length = %d\n", datagram_length);
printf("Current position = %d\n", current_position);
current_position += header_length;
fseek(ip_packets, datagram_length, current_position);
current_position += datagram_length;
printf("Current position = %d\n", current_position);
long pos;
pos = ftell(ip_packets);
printf("pos is %ld bytes\n", pos);
Печатается:
Header length = 20
Datagram length = 40
Current position = 20
Current position = 60
pos is 20 bytes
Код выше включает в мою переменную инициализации для функции fseek()
. Я пробовал использовать SEEK_CUR
как параметр int whence
, но тогда программа не заканчивается. Конец файла никогда не был достигнут, после запуска всего лишь секунду я получаю pos is 234167456 bytes
, и файл составляет всего 377 байт.
UPDATE
Видимо, вы должны открыть файл в режиме r+
, поэтому я обновил, но он по-прежнему делает то же самое
ip_packets = fopen("ip_packets", "r+");
Также пытался rb
режим
РЕШЕНИЕ
Мое решение состояло в том, чтобы просто заколеровать количество байтов и вызвать fgetc()
внутри каждого цикла. Не подходит, но он работает
Я забыл включать переменные инициализации - они были добавлены. Я думал, что должен использовать 'SEEK_CUR', но тогда файл никогда не доходит до конца. Я разрешаю ему работать в течение секунды, а полученный 'pos - 234167456 байт', а файл - всего 377 байт. Программа не заканчивается –
Это не редкость, что после исправления одной ошибки вы сталкиваетесь с другой. –