Ошибка в получении файла - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть этот код:

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.Как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Согласно странице руководства для send(2), она может записывать только в сокет, а не в обычный файл; если бы вы проверили errno (например, perror), вы бы увидели, что для него установлено значение ENOTSOCK. Вы всегда должны видеть какая ошибка устанавливается, иначе отладка - это просто съемка в темноте.

Кроме того, поскольку это C ++, я действительно думаю, что вы должны использовать ввод / вывод в стиле C ++ (std::ofstream и т. Д.) Для записи в обычный файл.

0 голосов
/ 21 декабря 2011

Проверьте возвращаемое значение

dest=open("/root/hello.txt",O_WRONLY);

Это должно быть положительное целое число; все остальное указывает на ошибку. Я предполагаю, что файл не может быть открыт по любой причине.

...