在C中写入stdout是什么意思?

时间:2013-05-07 23:13:52

标签: c unix stdout

写入“stdout”的程序是否写入文件?屏幕?我不明白写入stdout是什么意思。

6 个答案:

答案 0 :(得分:46)

这意味着您要在会话的主输出设备上打印输出......无论可能是什么。用户的控制台,tty会话,文件或谁知道什么。该设备可能会有所不同,具体取决于程序的运行方式和位置。

以下命令将写入标准输出设备(stdout)...

printf( "hello world\n" );

这实际上是另一种方式......

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

在这种情况下,stdout是指向FILE流的指针,表示应用程序的默认输出设备。你也可以使用

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

在这种情况下,您将输出发送到应用程序的标准错误输出设备,该设备可能与stdout相同或不同,与stdout一样,{{1 }}是指向stderr流的指针,表示错误消息的默认输出设备。

答案 1 :(得分:12)

取决于。

当您承诺将输出发送到stdout时,您基本上会将其留给用户来决定输出应该去哪里。

如果您使用printf(...)(或等效的fprintf(stdout, ...)),则会将输出发送到stdout,但实际结束的位置取决于我如何调用您的输出程序

如果我从我的控制台启动程序,我会在控制台上看到输出:

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

但是,我可能会启动这样的程序,在控制台上不产生任何输出:

$ prog > hello.txt

但我现在有一个文件&#34; hello.txt&#34;与文本&#34;你好,世界!&#34;在内部,感谢shell的重定向功能。

谁知道 - 我甚至可以连接其他设备并且输出可以去那里。关键是,当您决定打印到stdout时(例如,使用printf()),您将无法准确知道它将会发生的位置,直到您看到该过程如何启动或使用为止。

答案 2 :(得分:2)

stdout代表标准输出流,它是操作系统本身可供您的程序使用的流。它从一开始就可以与stdinstderr一起提供给您的程序。

他们指向(或来自)的东西可以是任何东西,实际上流只是为程序提供了一个对象,可以用作发送或检索数据的接口。默认情况下,它通常是终端,但可以在任何地方重定向:文件,管道goint到另一个进程等等。

答案 3 :(得分:2)

stdout是标准输出文件流。显然,它是第一个,输出的默认指针是屏幕,但是你可以根据需要将它指向一个文件!

请阅读:

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

C ++与C非常相似,但面向对象。

答案 4 :(得分:1)

stdout是UNIX中的标准输出流。见http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams。 在终端中运行时,您会在终端中看到写入stdout的数据,您可以根据需要重定向。

答案 5 :(得分:0)

@K Scott Piel写了great answer here,但我想补充一点。

请注意,stdout信息流为usually line-buffered,因此要确保输出实际打印而不是只是等待写入缓冲区,必须清除通过使用printf

结束\n语句来缓冲

前:

printf("hello world\n");

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

或类似,或者您必须在fflush(stdout);来电后致电printf

前:

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

在此处阅读更多内容:Why does printf not flush after the call unless a newline is in the format string?