Подтвердить что ты не робот

Что значит писать в stdout в C?

Записывает ли программа, которая пишет в "stdout", файл? экран? Я не понимаю, что значит писать в stdout.

4b9b3361

Ответ 1

Это означает, что вы печатаете вывод на основном устройстве вывода для сеанса... что бы это ни было. Пользовательская консоль, сеанс tty, файл или кто знает что. Какое это устройство может варьироваться в зависимости от того, как программа запускается и откуда.

Следующая команда будет записывать на стандартное устройство вывода (stdout)...

printf( "hello world\n" );

Это еще один способ, по существу, сделать это...

fprintf( stdout, "hello world\n" );

В этом случае stdout является указателем на поток FILE который представляет устройство вывода по умолчанию для приложения. Вы также можете использовать

fprintf( stderr, "that didn't go well\n" );

в этом случае вы отправляете вывод на стандартное устройство вывода ошибок для приложения, которое может или не может быть таким же, как stdout - как и в случае stdout, stderr является указателем на поток FILE представляющий устройство вывода по умолчанию для Сообщения об ошибках.

Ответ 2

Это зависит.

Когда вы фиксируете отправку вывода на stdout, вы в основном оставляете его пользователю, чтобы решить, куда должен идти этот вывод.

Если вы используете printf(...) (или эквивалентный fprintf(stdout,...)), вы отправляете вывод в stdout, но там, где это действительно заканчивается, может зависеть от того, как я вызываю вашу программу.

Если я запустил вашу программу из консоли, как это, я увижу вывод на моей консоли:

$ prog
Hello, World! # <-- output is here on my console

Тем не менее, я могу запустить такую программу, не создавая выход на консоли:

$ prog > hello.txt

но теперь у меня есть файл "hello.txt" с текстом "Hello, World!". внутри, благодаря функции перенаправления оболочки.

Кто знает - я мог бы даже подключить какое-то другое устройство, и выход мог бы пойти туда. Дело в том, что когда вы решаете печатать на stdout (например, используя printf()), вы точно не знаете, куда он пойдет, пока не увидите, как процесс запускается или используется.

Ответ 3

stdout означает стандартный поток вывода, и это поток, доступный вашей программе самой операционной системой. Он уже доступен вашей программе с самого начала вместе с stdin и stderr.

То, что они указывают (или из), может быть чем угодно, на самом деле поток просто предоставляет вашей программе объект, который можно использовать в качестве интерфейса для отправки или получения данных. По умолчанию это, как правило, терминал, но он может быть перенаправлен везде, где вы хотите: файл, в трубку для другого процесса и т.д.

Ответ 5

stdout - стандартный поток выходных файлов. Очевидно, что первым и указателем по умолчанию для вывода является экран, однако вы можете указать его на файл по своему желанию!

Пожалуйста прочти:

http://www.cplusplus.com/reference/cstdio/stdout/

C++ очень похож на C, однако, ориентирован на объект.

Ответ 6

@K Скотт Пиел написал отличный ответ здесь, но я хочу добавить один важный момент.

Обратите внимание, что поток stdout обычно буферизируется по строке, поэтому, чтобы гарантировать, что вывод на самом деле напечатан, а не просто оставлен в буфере, ожидающем записи, вы должны сбросить буфер, либо закончив свою инструкцию printf, \n

Пример:

printf("hello world\n");

или

printf("hello world"); 
printf("\n");

или аналогичный, ИЛИ вы должны вызвать fflush(stdout); после вашего вызова printf.

Пример:

printf("hello world"); 
fflush(stdout);

Подробнее здесь: Почему printf не очищается после вызова, если в строке формата не указана новая строка?