如何在C中获取应用程序路径?
我正在使用GTK为运行Linux的C程序创建一个接口 我正在使用此函数加载我的XML接口:如何在C中获取应用程序路径?,c,gtk,filepath,C,Gtk,Filepath,我正在使用GTK为运行Linux的C程序创建一个接口 我正在使用此函数加载我的XML接口: gtk_builder_add_from_file(builder, g_build_filename("myInterface.glade", NULL), &error); 只要我和我编译的文件在同一个目录中,它就可以工作。 但是如果我在另一个目录中,比如说一个子目录,我执行它:。/a.out,我的程序找不到该文件 因此,首先要获得程序路径(“/home/../program”),然后添加文
gtk_builder_add_from_file(builder, g_build_filename("myInterface.glade", NULL), &error);
只要我和我编译的文件在同一个目录中,它就可以工作。
但是如果我在另一个目录中,比如说一个子目录,我执行它:。/a.out
,我的程序找不到该文件
因此,首先要获得程序路径(“/home/../program”),然后添加文件名以获得绝对路径
但我不知道如何获得程序路径。我不确定这是不是最好的办法
有什么想法吗?谢谢 argv[0]包含为运行程序而运行的相对/完整路径 只需扫描到最后一个“/”,这将是您当前位置的运行目录 “编辑”经过进一步研究,我发现这一点在所有情况下都有效:
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <libgen.h>
int main()
{
char path[500] = {0};
int dest_len = 500;
if (readlink ("/proc/self/exe", path, dest_len) != -1)
{
dirname (path);
strcat (path, "/");
printf("path=%s\n", path);
}
}
#包括
#包括
#包括
#包括
int main()
{
字符路径[500]={0};
int dest_len=500;
if(readlink(“/proc/self/exe”,路径,dest_len)!=-1)
{
目录名(路径);
strcat(路径“/”;
printf(“路径=%s\n”,路径);
}
}
在使用GTK的情况下,最好直接使用并编译myInterface.glade
到程序中。argv[0]
包含调用程序的名称。你不能依赖于完整的路径。这仍然是滥用参数向量和不可靠的问题解决方案。argv[0]只是被调用的程序名:它可能包含相对路径,可能包含完整路径,也可能根本不包含任何路径。这一点很有道理,但在大多数情况下,这是一个很好的解决方案。我一直使用它,所以如果有更好的解决方案,我想知道。你需要哪个OS?到目前为止,答案都不考虑执行时没有执行给定路径的情况,而是通过扫描“<代码>路径< /COD>环境变量”被shell发现。在libgen.h中,我可以获取argv[0]的路径并将文件路径连接到它。这正是我需要的。我有一些代码试图做到这一点。