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

问题描述:

我正在使用GTK为运行Linux的C程序创建一个接口。如何在C中获取应用程序路径?

我使用这个函数来加载我的XML接口:

gtk_builder_add_from_file(builder, g_build_filename("myInterface.glade", NULL), &error); 

只要我在同一目录作为我编译的文件,它的工作原理。 但是,如果我在另一个目录中,让我们说一个孩子,然后执行它:../a.out,我的程序找不到该文件。

所以我们的想法是首先获取程序路径(“/ home /.../program”)并添加文件名以获取绝对路径。

但我不知道如何获得程序路径。而且我不确定这是使其工作的最佳主意。

有什么想法?谢谢!

+0

在哪个操作系统上需要它? – alk 2014-09-28 11:02:09

+1

到目前为止,答案并没有考虑到executbale开始时没有给出路径的情况,而是通过扫描PATH环境变量被shell发现。 – alk 2014-09-28 11:06:27

+2

相关如果操作系统是Linux:http://*.com/q/606041/694576 – alk 2014-09-28 11:07:14

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); 
    } 
} 
+4

'argv [0]'包含程序被调用的名称。你不能依靠其中的完整路径。 – MicroVirus 2014-09-28 10:49:03

+0

好的,我修改了我的回答 – 2014-09-28 10:59:30

+0

这仍然滥用参数向量,并且不可靠作为问题的解决方案。 argv [0]只是被调用的程序名称:它可能包含一个相对路径,它可能包含一个完整路径,它可能根本不包含任何路径。 – jku 2014-09-29 09:21:59

在您使用GTK的情况下,最好使用GResource并将myInterface.glade直接编译到您的程序中。