我使用Qt-4作为框架在C++中编程,给出了一个目录(即/usr/bin),我想知道该程序是GUI还是控制台应用程序。
我看到了一些关于如何做这个窗口的信息,还有关于在Linux上(在精灵内部)不存在类似的(为了获胜)标识的信息。是否有其他方法在Linux上执行此操作?
我想:
EDIT0:这个项目是一个应用程序启动程序
EDIT1:一旦对程序列表进行了分类,只要用户选择非图形化应用程序,我就可以启动终端仿真器。
最后结论:
在人们回答和额外搜索之后,确实不可能可靠地区分控制台和gui应用程序。我的最佳选择是做几个考虑,比如搜索.desktop文件,做一些假设,比如工具中列出的工具,比如/bin、/sbin和/usr/sbin等等。
可能会为找到的每个条目解析ldd的输出。
谢谢。
发布于 2013-05-14 20:49:37
程序可以尝试作为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这样的手动异常。
发布于 2013-05-15 14:09:29
如果您正在编写(另一个)应用程序启动程序,请跟踪创建所有其他应用程序启动程序的人所做的,并使用 files。该规范已经定义了Terminal选项,这正是您要寻找的。
https://stackoverflow.com/questions/16550112
复制相似问题