Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中获取应用程序路径?_C_Gtk_Filepath - Fatal编程技术网

如何在C中获取应用程序路径?

如何在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为运行Linux的C程序创建一个接口

我正在使用此函数加载我的XML接口:

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]的路径并将文件路径连接到它。这正是我需要的。我有一些代码试图做到这一点。