我使用Qt-4作为框架在C ++中编程,给定一个目录(例如/ usr / bin),我想知道该程序是GUI还是控制台应用程序。
我遇到了一些关于如何做这个窗口的信息,以及关于在Linux上(类似于精灵)的类似(Win)标识的不存在的信息。 有没有其他的方法来在Linux上执行此操作?
我想到:
编辑0:这个项目是一个应用程序启动器
编辑1:一旦我有分类的程序列表,我可以启动一个terminal模拟器,每当用户select一个非graphics化的应用程序
定论:
在人们回答和额外search之后,真正无法可靠地辨别控制台和gui应用程序。 我最好的办法是做一些考虑,比如search.desktop文件,做一些假设,比如/ bin,/ sbin和/ usr / sbin等。
也许为每个find的条目parsingldd的输出。
谢谢。
一个程序可以尝试作为GUI程序启动,否则切换到控制台。 (实际上有些程序确实表现出这样的行为,例如emacs
)。 它甚至可以随机的,或者由于一些特定的配置…
例如,假设vi
是一个控制台程序, emacs
是一个图形化程序,下面的简单程序可以随机地作为GUI或控制台:
#include <unistd.h> int main(int argc, char**argv) { if (getpid()%2 == 0) { argv[0]="vi"; execv("/usr/bin/vi", argv); } else { argv[0]="emacs"; execv("/usr/bin/emacs", argv); } return EXIT_FAILURE; }
最简单(但不是万无一失)的方式是测试getenv("DISPLAY")
返回NULL。 更复杂的方法是调用XOpenDisplay
,在失败时返回NULL
(以及多个X11工具包)。
所以,你的问题没有一个确切的答案,并没有真正的意义。
你可以使用ldd
….并手动添加例如firefox
异常。
如果您正在编写(另一个)应用程序启动器,请遵循创建所有其他应用程序启动器的人员所做的,并使用.desktop
文件 。 该规范已经定义了Terminal
选项,这正是你正在寻找的。