gpt4 book ai didi

C++ - 如何检测我在没有终端的情况下运行

转载 作者:行者123 更新时间:2023-11-30 04:30:20 24 4
gpt4 key购买 nike

在 C/C++ 中,我的程序如何确定是否有桌面(系统或远程)?

我的项目有三个独立的程序(现在)在不同的 gnome 终端中运行。它由 .profile 的最后一行启动,因此无论我是在系统桌面 (gnome) 还是通过 VPN/telnet 或 VPN/remote-desktop 远程连接,它都会启动。我的机器在 250 英里外的一个测试站点,所以我经常远程登录进行更改并不得不重新启动程序。

我希望我的程序能够检测到它是从桌面环境还是从 telnet session 启动的。最好,我希望它们在远程连接断开后继续运行。

显然,我需要将我的程序变成守护进程,以便它们在我关闭连接后仍然存在。但是,如果我在桌面环境的终端中启动它们,我实际上可以打开三个终端,我想看它们的进度消息。如果我断开远程桌面的连接,我希望守护进程检测到这一点并关闭打印(对于现在已终止的术语),但继续以正常(静默)守护进程模式运行。最重要的是,这些程序可以偶尔重新检查桌面并通过打开新终端来恢复打印。

这可能吗?有什么编码建议吗?

提前致谢。

最佳答案

您可以使用isatty 函数。 Detect if stdin is a terminal or pipe?

#include <stdio.h>
#include <io.h>

//...

if (isatty(fileno(stdin)))
printf( "stdin is a terminaln" );
else
printf( "stdin is a file or a pipen");

您可以在 http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_12.html 找到更多信息。

更多代码:http://pastebin.com/S3Lr9tik

关于C++ - 如何检测我在没有终端的情况下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8760255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com