繁体   English   中英

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

[英]What does it mean to write to stdout in C?

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

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

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

printf( "hello world\n" );

这只是另一种方式,本质上,这样做......

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

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

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

在这种情况下,你将被发送输出到标准误差输出装置的应用,其可能或可能不,是相同的stdout -与stdoutstderr是一个指针指向一个FILE流代表用于默认输出设备错误信息。

这取决于。

当您承诺将输出发送到stdout ,您基本上是让用户来决定该输出的去向。

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

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

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

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

$ prog > hello.txt

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

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

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

请阅读:

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

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

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

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

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

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

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

前任:

printf("hello world\n");

要么

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

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

前任:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM