Linux - почему сообщение об ошибке не появляется после вызова write (2, "...")? - PullRequest
0 голосов
/ 27 апреля 2011

Я скомпилировал следующий код с gcc версии 4.4.3 (Ubuntu 4.4.3-4ubuntu5) под Ubuntu 10.04 LTS.

user@ubuntu:~/doc$ cat simple_write.c
#include <unistd.h>
#include <stdlib.h>

int main()
{
    if ((write(1, "Here is some data\n", 18)) != 18)
        write(2, "A write error has occurred on file descriptor 1\n",46);

    exit(0);
}

user@ubuntu:~/doc$ ./simple_write 
Here is some data

Может кто-нибудь объяснить мне, почему не выводится второе сообщение об ошибке? Это перенаправлено в другое место? Тогда как сделать так, чтобы он появился?

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Второе сообщение не отображается, поскольку первое write() успешно записало 18 символов.

Для демонстрации измените != на ==.

1 голос
/ 27 апреля 2011

Возвращаемое значение от write:

После успешного завершения эти функции должны возвращать количество байтов, фактически записанных в файл, связанный с fildes.

Вы попросили его написать 18 байт, и он сделал так, что возвращает 18. Ваша ошибка не будет напечатана, потому что, 18 != 18 ложно. Может быть, вы запутались, потому что \n на самом деле является одним байтом в системах Unixy.

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