В этом коде есть несколько вещей неправильных или потенциально неправильных.
result = fread (send_buffer,1,Fsize,sendFile);
Эта строка читает Fsize
байтов от sendFile
до send_buffer
. Я не вижу здесь, откуда вы взяли Fsize
, но, учитывая его имя, я предполагаю, что это размер файла. Вы гарантировали, что send_buffer
достаточно большой, чтобы вместить Fsize
байтов? Если нет, то у вас есть потенциальный переполнение буфера, которое может привести к случайной записи данных в ваш стек, вызывая всевозможные проблемы. Вы, вероятно, хотите прочитать в sizeof(send_buffer)
. У вас также, кажется, есть постоянная, MAX_MSG
. Это равняется размеру буфера отправки? Если нет, то у этой линии также будут проблемы. В общем, вы должны попытаться использовать один, последовательный метод ссылки на размер этого буфера, чтобы вас не смутили два разных значения и не возникло проблем при этом.
Далее попробуйте проверить наличие ошибок при чтении файла:
if(result != Fsize && (result!=0)) {
printf("Reading error");
exit (1);
}
Теперь давайте посмотрим, что в документации для fread
сказано:
fread () и fwrite () возвращают число
элементов успешно прочитанных или написанных
(т. е. не количество символов).
Если произошла ошибка или конец файла
достигается, возвращаемое значение
короткий счетчик предметов (или ноль).
fread () не различает
конец файла и ошибка, и вызывающие
необходимо использовать feof (3) и ferror (3) для
определить, что произошло.
Здесь вы выдаете ошибку, если у вас нет точно Fsize
или ноль предметов. Теперь, согласно документам, у вас может быть либо короткий счет, либо ноль в случае ошибки или конца файла. Чтобы определить, нужно ли вам прерывать цикл раньше времени или умереть из-за ошибки, вам нужно будет позвонить feof
и / или ferror
.
Я полагаю, что ваша ошибка связана с переполнением буфера, упомянутым выше, но я бы порекомендовал исправить обе эти проблемы.