如果我编译这段源代码:
在msys2中使用
但是msys2如何显示该输出?
#include <stdio.h>
int main(int argc, char* args[]) {
printf("Done!\n");
return 0;
}
在msys2中使用
mingw-w64-x86_64-toolchain
工具链,通过gcc hello.c -o hello -mwindows
编译hello.c文件,并在msys2内运行它,将会看到:
同时,如果我从PowerShell(或cmd)调用同一可执行文件,我会看到:
说实话,考虑到-mwindows
表示生成Windows可执行文件而不是控制台可执行文件,我对后者的出现并不感到惊讶-我已经看到过很多次了。但是msys2如何显示该输出?
ShellExecuteExW
,在这种情况下,结果取决于相关的可执行文件是否为控制台应用程序。ShellExecuteExW
不会继承句柄,因此,如果".EXT"与我们的非控制台应用程序"hello.exe"相关联,则"file.ext | more"将无法正常工作。如果我们将"hello.exe"构建为控制台应用程序,则它将可以正常工作,因为NtCreateUserProcess
会隐式复制(而不是继承)标准句柄到控制台应用程序。 - Eryk Sun