我正在使用C开发一个应该在Windows和Linux上运行的应用程序。这个应用程序应该隐藏运行它的shell。在Windows上,我能够通过调用ShowWindow函数来修复它,但在Linux上,我找不到实现相同效果的方法。
void main(void)
{
do_stuff();
#ifdef _WIN32
ShowWindow(GetConsoleWindow(), SW_HIDE);
#else
// Linux hide current console
#endif
while(1)
{
do_other_stuff();
}
}发布于 2022-11-16 06:51:51
在linux中,“控制台”(我在下面解释的单词前后加引号)不是这样的控制台,而是另一个独立运行主应用程序的应用程序,因此您通常无法完全控制它(因为应用程序不知道它是从实际的系统控制台、从xterm(1)应用程序、gnome-terminal应用程序等运行的)。
假设您从ssh连接到远程服务器启动应用程序,DISPLAY环境变量指示X11服务器显示信息。在这种情况下,生成应用程序的命令shell不是图形环境“控制台”,而是运行在ssh会话上的本地shell,它是从完全失控的远程连接启动的。
关于“控制台”一词的注释: windows "console“引用常见的POSIX接口,该接口使用三个打开文件描述符(在Windows中为5个)、标准输入、标准输出和标准错误(在MS中也是标准打印机和标准通信端口)描述符启动进程,默认情况下允许程序从其标准输入中读取,并写入其标准输出和标准错误。控制台一词来源于这样一个事实:在MS-DOS中,( Windows通过向UNIX发出类似的系统调用来读写描述符)对CP/M进行了改进)所有这些东西都发生在控制台上,所以他们选择(在Windows中)术语“Windows控制台应用程序”作为Windows正常应用程序通常不提供这个接口。为此,Windows要求将程序链接为"Windows控制台“--这意味着链接一个特殊库,该库打开Windows窗口(受应用程序控制),并使所有输入、输出和标准错误都进入该库。这使得Windows控制台应用程序能够控制控制台,因为它是一个应用程序窗口,而不是Linux的情况。
在UNIX系统中,控制台一词适用于一种特殊设备(其特性类似于用户会话所用的设备),其中内核用于启动与管理员的通信(类似--但不等于--内核的标准输入、标准输出和标准错误)--一种通常附在打印机上的特殊设备,用于显示关于设备错误或内核安全消息的内核消息。UNIX系统通常有许多文本设备,并且只有一个被选择作为系统的控制台,但是由于与Windows机器的不同,Microsoft决定重新解释这个术语,以方便他们。可能是个错误但被接受的决定。
https://stackoverflow.com/questions/74350355
复制相似问题