Java/C++输出原理是什么?cout<<和System.out.print有什么区别?

3

我主要关注Linux,但涉及Windows的答案也受欢迎。

当我使用System.out.printlncout<<时,实际上会发生什么?在GUI应用程序中执行cout时会发生什么(它去哪里了)?

我感兴趣的一个例子是Netbeans IDE。当我在Netbeans中运行Java程序时,是什么使IDE能够“窃取”程序的输出并显示它?

更新/旁注

http://www.linfo.org/standard_output.html

标准输出的一个特点是它有一个默认目的地,但可以轻松地重定向(即转移)到另一个目的地。默认目的地是启动程序的计算机上的显示屏。因为标准流是纯文本,所以根据定义是人类可读的。

“启动程序”的意思是什么? 我不太熟悉程序如何开始执行,但在我的Netbeans示例中,很明显是IDE启动了程序。那是什么意思?当设置要执行程序时,是否有一些元数据漂浮在周围,让操作系统知道Netbeans正在启动程序?


1
数据被写入到 stdout - chris
请注意,Java示例System.out.println会打印括号()中指定的值,并以新行结束输出。对于cout <<,它将输出在<<之后指定的值,而不带有换行符。要使cout打印一个新行字符,请在值后添加<< endlSystem.out.print在这方面比System.out.println更接近于cout - localhost
@CraigPatrickLafferty,控制方式是什么?您提供的引用说明它们可以被重定向。这在命令行实用程序中经常发生。 - chris
能否在无法访问或更改程序本身的情况下重定向程序的输出?如果我编写一个Java程序并想要执行一个shell脚本并检索输出,该如何重定向它? - Craig Lafferty
@CraigPatrickLafferty,将其重定向(./prog > output.txt)或者管道传输(./prog | less)。 - chris
我的错误,我想拦截输出,而不是从文件中检索执行后的输出。尽管如此,这非常有帮助。 - Craig Lafferty
1个回答

5
当程序被执行时,会有三个特殊的文件描述符:stdin、stdout和stderr与某些设备相关联,以确定如何管理输入和输出。如果您从终端shell执行程序,则stdin与键盘相关联,stdout和stderr与终端窗口相关联。当您在开发环境中执行程序时,通常会在一些特殊的控制台选项卡中显示stdout和stderr。在其他情况下,输出可能会写入某个日志文件或被丢弃...
System.out和cout是Java和C++中表示stdout流的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接