Windows 中的 stdin、stdout 文件位于哪里?

Sou*_*a B 7 c windows stdin stdout file

每当我执行 C 程序时,都会有 3 个标准文件,stdin, stdout, stderr. 这些在 Linux 中映射到/proc/self/fd/0, /proc/self/fd/1, /proc/self/fd/2,它链接到/dev/pts/0我的电脑。这是伪终端,该进程向其输出并从中获取输入。

Windows 中与此等效的是什么?当我在 Windows 中执行相同的程序时,这些stdin, stdout,指向哪里?stderr

Kaz*_*Kaz 8

在 Linux 内核上,stdin、stdout和stderr流在 中具有相应的条目/proc。该/proc文件系统是一种信息结构,提供系统的可见性;它不是这些流的实现。

\n

首先stdout是一个C概念:I/O流的实例FILE *。操作系统内核(无论是Linux还是Windows)对此一无所知。这些流保存操作系统文件描述符/句柄。Linux 或 Windows 程序stdout由于链接到 C 库而具有流,但对于不是用 C 编写的程序或使用 C 运行时的基于 C 的语言来说,情况可能并非如此。

\n

类 Unix 操作系统中的进程具有编号的文件描述符,从零开始。按照惯例,前三个\xe2\x80\x940、1和2\xe2\x80\x94分别是输入、输出和错误。

\n

在 Microsoft Windows 中,也有类似的概念。一个进程具有三个类型的句柄HANDLE,它们具有相同的用途。当您使用 创建进程时,它们在具有以下成员的结构CreateProcess中指定:STARTUPINFO

\n
HANDLE hStdInput;\nHANDLE hStdOutput;\nHANDLE hStdError;\n
Run Code Online (Sandbox Code Playgroud)\n

STARTF_USESTDHANDLES如果指定了标志,则这些是有意义的。

\n

Microsoft Windows 没有/proc文件系统。它具有基于 API 的机制来检查各种系统状态。系统实用程序被写入这些 API。例如,Handle程序可用于检查哪些进程打开了哪些文件。\nLinux 上的类似应用程序将/proc在后台进行遍历。

\n