【发布时间】:2017-09-26 14:19:58
【问题描述】:
我想只执行 gui 应用程序,但问题是,我不知道如何检查。
你有解决这个问题的办法吗?
#include <stdio.h>
#include <stdlib.h>
#include <elf.h>
int main(int argc, char *argv[]) {
if(argc < 2)return 1;
char buf[256];
Elf64_Ehdr elfhdr;
FILE *f = fopen(argv[1],"rb");
if(f == NULL)return 2;
fread(&elfhdr,1,64, f);
fclose(f);
if(elfhdr.e_ident[0] == 127 && elfhdr.e_ident[1] == 'E'
&& elfhdr.e_ident[2] == 'L' && elfhdr.e_ident[3] == 'F'){
if(elfhdr.e_type == 2){
sprintf(buf,"./'%s' > /dev/null 2>&1 &",argv[1]);
system(buf);
}
}
return 0;
}
【问题讨论】:
-
你的意思是给定一个ELF文件你想知道运行它是否会创建X11或类似的图形窗口,或者它是否会留在终端内?
-
@John Zwinck,是的,只有来自 X11、SDL 等的 gui
-
您可以与
ldd executable | grep "libX"联系以查看文件是否链接到X 共享对象库。 -
我不理解那些仅仅因为提问者误解了平台的运作方式而对问题投反对票的人。仅仅因为最佳答案可能是“无法完成”并不意味着这不是一个合理的问题。
-
@nimday 您的问题听起来像是 XY 问题。你能解释一下你的实际目的是什么吗?也就是说,是什么导致你想要做出这种区分?示例:
mpv如果给定文件是视频,则使用 GUI,否则使用 CLI。qtchooser是一个纯 cli 程序,其目的是透明地用另一个可能显示或不显示 GUI 的动态确定的程序替换自己。python程序具有打开窗口的能力,但只有在它解释的脚本命令它时才会这样做。这些示例对您来说是 GUI 还是 CLI?为什么需要区分?