51

写入“stdout”的程序是否写入文件?屏幕?我不明白写入标准输出意味着什么。

4

6 回答 6

65

这意味着您正在会话的主输出设备上打印输出……不管是什么。用户的控制台、一个 tty 会话、一个文件或谁知道什么。该设备可能是什么取决于程序的运行方式和位置。

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

printf( "hello world\n" );

从本质上讲,这只是另一种方式......

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

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

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

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

于 2013-05-07T23:14:34.527 回答
19

这取决于。

当您承诺将输出发送到 时stdout,您基本上是让用户决定该输出应该去哪里。

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

如果我像这样从控制台启动您的程序,我将在控制台上看到输出:

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

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

$ prog > hello.txt

但我现在会有一个文件“hello.txt”,其中包含文本“Hello, World!” 内部,这要归功于 shell 的重定向功能。

谁知道——我什至可能会连接一些其他设备,然后输出就可以到那里。关键是,当您决定打印到stdout(例如,使用printf())时,在您看到进程是如何启动或使用的之前,您不会确切知道它会去哪里。

于 2015-06-02T05:17:02.263 回答
4

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

请阅读:

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

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

于 2013-05-08T00:02:35.263 回答
3

stdout是 UNIX 中的标准输出流。请参阅http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams。在终端中运行时,您将看到写入stdout终端的数据,您可以根据自己的选择重定向它。

于 2013-05-07T23:18:16.587 回答
3

stdout代表标准输出流,它是操作系统本身可用于您的程序的流。stdin它与和一起从一开始就可用于您的程序stderr

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

于 2013-05-07T23:18:28.930 回答
2

@K Scott Piel在这里写了一个很好的答案,但我想补充一点。

请注意,stdout通常是 line-buffered,因此为了确保输出被实际打印,而不是仅仅留在缓冲区中等待写入,您必须通过以printfa 结束语句来刷新缓冲区\n

前任:

printf("hello world\n");

或者

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

或类似的,或者你必须fflush(stdout);在你打电话后printf打电话。

前任:

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

在此处阅读更多信息:为什么 printf 在调用后不刷新,除非换行符在格式字符串中?

于 2018-01-31T21:36:41.480 回答