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

问题描述 投票:0回答:7

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

c unix stdout
7个回答
70
投票

这意味着您正在会话的主输出设备上打印输出......无论是什么。用户的控制台、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
表示错误消息的默认输出设备的流。


22
投票

这要看情况。

当您承诺将输出发送到

stdout
时,您基本上是让用户来决定输出应该发送到哪里。

如果您使用

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

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

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

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

$ prog > hello.txt

但我现在有一个文件“hello.txt”,其中包含文本“Hello,World!”在里面,感谢 shell 的重定向功能。

谁知道呢——我什至可能会连接一些其他设备,然后输出就可以到那里。关键是,当您决定打印到

stdout
(例如,通过使用
printf()
)时,您将无法确切知道它会去哪里,直到您看到进程是如何启动或使用的。


5
投票

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

请阅读:

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

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


4
投票

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


3
投票

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

请注意,

stdout
流通常是行缓冲的,因此为了确保输出实际上被打印出来,而不只是留在缓冲区中等待写入,您必须通过结束printf
来刷新缓冲区带有 
\n
 的声明

例如:

printf("hello world\n");

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

或类似的,或者您必须在

fflush(stdout);

 通话后致电 
printf

例如:

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

在此处阅读更多内容:

为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?


3
投票

stdout

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

它们指向(或来自)的内容可以是

任何东西。实际上,流只是为您的程序提供一个可以用作发送或检索数据的接口的对象。默认情况下,它通常是终端,但可以将其重定向到您想要的任何位置:文件、通往另一个进程的管道等等。


0
投票

stdout

输出流的术语。 stdout
 
像文件一样对待,但使用 print()
 进行写入。

© www.soinside.com 2019 - 2024. All rights reserved.