【问题标题】:Why does printf output show up in a command prompt?为什么 printf 输出显示在命令提示符中?
【发布时间】:2021-06-30 16:23:09
【问题描述】:

我们都知道基本的 Hello World 程序:

#include <stdio.h>
int main() {
   printf("Hello World!");
   return 0;
}

这将打开一个命令提示符并向我们显示“Hello, World”消息。
我的问题是:为什么?例如,为什么消息显示在命令提示符中而不是记事本中?为什么不作为 Windows 通知?为什么它专门是命令提示符而不是其他东西?

【问题讨论】:

  • 因为历史上 C 存在于除了终端之外的任何东西之前,所以终端是放置 stdout 文本的默认位置?如果没有就放置位置达成明显共识,则将其放置在其他任何地方都需要就放置位置达成一致。
  • stdout 指向终端,所以它会输出到终端。您可以使用文件处理函数执行类似的操作以输出到文件,但 printf 将输出到终端(或任何输出屏幕)。
  • 你错了。 程序不会打开命令窗口。如果在您运行程序时打开这样一个窗口,那是因为操作系统打开它是为了为程序的标准流提供一个终点。

标签: c windows terminal


【解决方案1】:

当您通过 Window 的文件资源管理器“打开”文件时,系统(不一定是直接操作系统;涉及各种子组件)会检查该文件。如果是原生 Windows 应用程序,系统会直接执行。如果它是另一种文件,系统将为其查找合适的应用程序。例如,如果它是一个 Microsoft Word 文件,系统将启动 Microsoft Word 并请求它打开该文件。

如果文件是“命令行”程序,系统将启动 Windows 终端(或各种 Microsoft Windows 版本中的类似程序)并请求运行该程序。更具体地说,它可能会启动 Windows 终端并请求运行特定的命令行 shell 并让该 shell 运行您的程序。

C 语言是在类 Unix 环境中成长起来的,在这种环境中,命令 shell 从物理键盘读取输入并将输出写入物理显示器。在现代系统中,这些通常被在软件中执行相同功能的伪设备所取代。当 shell 启动命令行程序时,它会创建一个新进程,该进程的标准输入和标准输出流连接到提供键盘/显示功能的伪设备。 (这是默认设置。您还可以请求 shell 启动程序,并将输入和输出重定向到文件和其他设备。)

然后,当您的程序写入标准输出时,它会转到伪设备,伪设备将数据中继到系统的适当部分,从而使文本显示在终端窗口中。

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多