Ошибка записи: 0 - PullRequest
       28

Ошибка записи: 0

2 голосов
/ 17 июня 2010

У меня ситуация клиент-сервер, когда я получаю данные, используя

read(socket, char_buf, BUF_SIZE)

, а затем попробуйте записать его в файл журнала, используя

write(filefd, char_buf, strlen(char_buf))

Как ни странно, это терпит неудачу (запись возвращает -1), и все же errno устанавливается в 0, и я могу напечатать сообщение, И дескриптор файла журнала работает (я пишу в него до и после этой команды).

Что происходит ??

(Работа на ядре Linux 2.4 (домашняя работа))

Ответы [ 3 ]

2 голосов
/ 17 июня 2010
int reads = read(socket, char_buf, BUF_SIZE);

if ( reads != BUF_SIZE )
{
    /* something might have gone wrong */
    fprintf( stderr, "%s\n", strerror( errno ));
}

int writes= = write( filedes, buffer, buffer_size );

if ( writes != buffer_size )
{
    /* something might have gone wrong */
    fprintf( stderr, "%s\n", strerror( errno ));
}

Я бы делал что-то подобное всегда после чтения или записи или подобных вызовов.

0 голосов
/ 17 июня 2010

Просмотрите ваш код с помощью отладчика и убедитесь, что каждый оператор делает именно то, что, по вашему мнению, он должен делать.Бьюсь об заклад, вы найдете более раннюю ошибку.

Кроме того, значение возврата для read() важноОн говорит вам, сколько байтов было фактически прочитано.Для успешного чтения это может быть от 1 до BUF_SIZE.

0 голосов
/ 17 июня 2010

Проверяли ли вы статус чтения ()? Может быть ошибка, из-за которой длина char_buf будет равна нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...