записать системный вызов в файл desciptor ZERO - PullRequest
1 голос
/ 14 апреля 2010
int main ( )
{
    char C[] = "Hello World";
    write(0,C,sizeof(C));
    return 0;
}

В вышеупомянутой программе я пишу в дескриптор файла ZERO, который, по-моему, по умолчанию равен STDIN. Тогда почему я получаю вывод в STDOUT?

shadyabhi@shadyabhi-desktop:~$ ./a.out
Hello Worldshadyabhi@shadyabhi-desktop:~$

1 Ответ

7 голосов
/ 14 апреля 2010

Стандартный ввод для чтения, а не записи.Что происходит, когда вы пишете в стандартный ввод (или читаете из стандартного вывода), не определено.Здесь и стандартный ввод, и стандартный вывод указывают на псевдотерминал, в который запускается приложение, и эмулятор терминала не позаботился о том, чтобы сделать дескриптор '0' доступным только для чтения.Следовательно, ядро ​​не запрещает запись в стандартный ввод и отправляется на псевдотерминал так же, как если бы оно было записано в стандартный вывод.

Для переносимости не следует полагаться на такое поведение.

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