我正在使用 Qt-4 作为框架在 C++ 中编程,给定一个目录(即 /usr/bin),我想知道该程序是 GUI 还是控制台应用程序。
我遇到了一些有关如何执行此窗口的信息,以及关于 Linux(在 elf 内)上不存在类似(与 Win)标识的信息。有没有其他方法可以在 Linux 上执行此操作?
我想了想:
- 使用 QProcess 生成每个条目并监视它的生命周期,假设控制台应用程序需要一些输入并且由于我没有提供任何输入,因此它将打印以显示帮助消息并退出。如果它在 x 秒后还活着,我会终止该进程并将其标记为包含 gui。这是一种可怕的方法并且容易出错;
- 运行 ldd 并解析任何 libX 的输出或其他。这似乎是一种更好的方法,尽管例如 firefox 不会被标记为具有 gui。
EDIT0:这个项目是一个应用程序启动器
EDIT1:一旦我对程序列表进行了分类,我就可以在用户选择非图形应用程序时启动终端仿真器
定论:
在人们回答和额外搜索之后,确实不可能可靠地区分控制台和 gui 应用程序。我最好的选择是做一些考虑,比如搜索 .desktop 文件,做一些假设,比如在 /bin、/sbin 和 /usr/sbin 等仅实用程序的地方列出的工具等。
也许为找到的每个条目解析 ldd 的输出。
谢谢。