У меня есть этот код:Ошибка при получении файла
while (1) {
char buffer[4096];
memset(buffer,0,4096);
int bytes_read = recv(client_fd, buffer, sizeof(buffer),0);
if (bytes_read == 0)
break;
if (bytes_read < 0) {
std::cout<< "Error "<<endl;
}
void *p = buffer;
int dest;
dest=open("/root/hello.txt",O_WRONLY);
while (bytes_read > 0) {
int bytes_written = send(dest, buffer, bytes_read,0);
if (bytes_written <= 0) {
std::cout<< "Error2 "<<endl;
}
bytes_read -= bytes_written;
p += bytes_written;
}
}
я получаю файл правильно. Программа переходит в цикл, где cout является «Error2», поэтому send возвращает -1. Проблема заключается в том, чтобы записать файл в новый файловый дескриптор, в этом случае переменная называется dest
. Как я могу решить эту проблему?
Разве вы не должны передавать сокет fd в качестве первого параметра ['send'] (http://pubs.opengroup.org/onlinepubs/007904975/functions/send.html)? –
Почему вы используете 'send' для записи в обычный файл? (Особенно в C++ ?!) И почему вы не проверяете 'errno' после' send' возвращает '-1'? Кажется, проще спросить 'perror', чем попросить StackOverflow. , , – ruakh
Ваш цикл сохраняет повторное открытие файла, каждый раз, когда новый дескриптор открывается в начале файла. И он никогда не закрывает его, поэтому он теряет дескрипторы. –