Я пытаюсь реализовать базовый файловый сервер. Я пытался использовать команду sendfile, найденную здесь: http://linux.die.net/man/2/sendfile Я использую TCP.
Я могу отправить его нормально, но в двоичном формате, и я не уверен, что это зависает.
Я пытаюсь получить файл с помощью recv, но он не проходит правильно.
Есть ли специальный способ получить двоичный файл и поместить его в строку?
EDIT:
Попросили предоставить код, вот он:
SENDFILE Call (из процесса сервера)
FILE * file = fopen(filename,"rb");
if ( file != NULL)
{
/*FILE EXISITS*/
//Get file size (which is why we opened in binary)
fseek(file, 0L, SEEK_END);
int sz = ftell(file);
fseek(file,0L,SEEK_SET);
//Send the file
sendfile(fd,(int)file,0,sz);
//Cleanup
fclose(file);
}
ПОЛУЧИТЬ вызов (из процесса клиента, даже более простого, чем цикл, просто нужно одну букву)
//recieve file
char fileBuffer[1000];
recv(sockfd,fileBuffer,1,0);
fprintf(stderr,"\nContents:\n");
fprintf(stderr,"%c",fileBuffer[0]);
РЕДАКТИРОВАТЬ: написал код для проверки возвращаемых значений. sendfile дает ошибку 9 - неверный номер файла. Который я предполагаю, находится у моего второго файлового дескриптора в вызове (тот для файла, который я посылаю). Я использовал его как int, потому что sendfile жаловался, что это не int.
Как использовать файл отправки, учитывая код указателя файла, который я использовал выше при вызове файла sendfile?