LINUX.ORG.RU

Передача бинарных данных по сети


0

0

Вот пытаюсь получить от фтп сервера файл. Файл загружается но достаточно часто размер загруженного файла не совпадает с размером исходного. Размер загруженного больше на один байт. Самое странное, что это проявляется не всегда. Я проверил это дело на видеоклипах и обычных исполняемых бинарных файлах, они спокойно работают. Судя по всему лишний байт записывается в конец файла... Не могу понять где я накосячил. То ли в записи в файл, толи в приеме данных с сервера. вот сорцы того участка кода где затаилась бага:

FILE *fd;
fd = fopen("/tmp/file","wb");
fseek(fd,0L,0);

void *buf[1];
int rc;

while(rc)
{
rc=recv(bindatasock, buf, sizeof(buf), 0);
if(rc>0) fwrite(buf, sizeof(buf), 1,fd);
}

Буду рад любой помощи :)


В fwrite нужно передавать не размер буфера -- sizeof(buf), а количество реально прочитанных байт.

void *buf[1]; -- зачем буфер объявлен как массив указателей на void?

anonymous
()
Ответ на: комментарий от anonymous

Помогло. Большое спасибо!

Хм. А как тогда объявлять буфер? Не как char же? о_О

2UrbanSerj: Маленький был только из-за моих ковыряний в этом алгоритме, етественно я его увеличу :)

Virun
() автор топика
Ответ на: комментарий от Virun

> Не как char же? о_О

Естественно как char.

anonymous
()
Ответ на: комментарий от generatorglukoff

Ты про утилитту или про системный вызов? В любом случае и первое и второе идут лесом.

Virun
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.