C++ 获取程序';Linux上的s目录

C++ 获取程序';Linux上的s目录,c++,linux,C++,Linux,我想知道如何在Linux上获取我的程序目录。例如,如果我的程序位于/home/myproject/下,并且我得到了目录,那么不管我从哪个目录调用程序,它都应该是/home/myproject/。我需要此功能,因为我需要能够访问与我的程序位于同一文件夹下的配置文件,而不管该程序的文件夹位于何处 我尝试过使用getcwd(),但它的作用如下: 如果我现在和程序在同一个文件夹中,它会工作的。但是,如果我在/root中并尝试执行位于/home/myproject下的程序,它会给我/root 如果我只是做

我想知道如何在Linux上获取我的程序目录。例如,如果我的程序位于
/home/myproject/
下,并且我得到了目录,那么不管我从哪个目录调用程序,它都应该是
/home/myproject/
。我需要此功能,因为我需要能够访问与我的程序位于同一文件夹下的配置文件,而不管该程序的文件夹位于何处

我尝试过使用
getcwd()
,但它的作用如下:

如果我现在和程序在同一个文件夹中,它会工作的。但是,如果我在
/root
中并尝试执行位于
/home/myproject
下的程序,它会给我
/root

如果我只是做一些像

std::ifstream is("anotherfile");

只要我在同一个目录中,它就可以工作,但如果我不在,它的工作原理与上面相同。

在Linux上,您可以使用
/proc/
。仔细阅读

我建议使用读取
/proc/self/exe
中的符号链接。它提供您的可执行文件。您可以使用它来获取其目录。还要注意哪些可能有用(事实上并非如此,因为正如Daniel Schepler所评论的,
/proc/self/exe
是一条规范路径……)

这是特定于Linux的,在罕见的病态情况下(您的可执行文件在执行过程中被删除或重命名)不起作用。看

请记住,Linux没有文件夹(它们只是一个GUI人工制品),但是。另见,,,等

最后,Unix的传统是将用户特定的配置文件保存在
$HOME
下(通常带有隐藏的点文件,例如
$HOME/.inputrc
),并将系统范围的配置文件保存在
/etc/
下。您可以使用as
getenv(“HOME”)
获取
$HOME
。看见在病理情况下,这种
getenv
可能会失败


顺便说一句,如果设置了某个特定的环境变量(例如
MYPROGCONFIG
),您甚至可以采用使用
getenv
进行测试的约定,如果设置了,则将其用作配置文件。不要忘记记录这些约定。

在Linux上,您可以使用
/proc/
。仔细阅读

我建议使用读取
/proc/self/exe
中的符号链接。它提供您的可执行文件。您可以使用它来获取其目录。还要注意哪些可能有用(事实上并非如此,因为正如Daniel Schepler所评论的,
/proc/self/exe
是一条规范路径……)

这是特定于Linux的,在罕见的病态情况下(您的可执行文件在执行过程中被删除或重命名)不起作用。看

请记住,Linux没有文件夹(它们只是一个GUI人工制品),但是。另见,,,等

最后,Unix的传统是将用户特定的配置文件保存在
$HOME
下(通常带有隐藏的点文件,例如
$HOME/.inputrc
),并将系统范围的配置文件保存在
/etc/
下。您可以使用as
getenv(“HOME”)
获取
$HOME
。看见在病理情况下,这种
getenv
可能会失败


顺便说一句,如果设置了某个特定的环境变量(例如
MYPROGCONFIG
),您甚至可以采用使用
getenv
进行测试的约定,如果设置了,则将其用作配置文件。不要忘记记录这些约定。

readlink(“/proc/self/exe”)
-或者使用一些库,比如Qt,它提供了
QCoreApplication::applicationDirPath()
。UNIX的方法是将配置文件存储在一个已知的目录中,与可执行文件的位置无关。通常,可执行文件由根用户安装在某处,并由一个或多个普通用户使用。这些用户可能有自己的私有配置文件,通常名为.appname.conf,并存储在用户的主目录中。默认配置文件通常位于/etc目录中。尽管我同意@BjornA。通常,有获取可执行文件目录的用例。我使用的一个方法是提供一个选项,通过将路径配置文件放置在构建树中的同一目录中,从构建目录调试可执行文件,同时不需要重新编译即可安装可执行文件,并让已安装的可执行文件从
/usr/share/
/usr/local/share/
@BjornA获取资源。谢谢,我知道配置文件存储在/etc/中,但我从未想过要将该文件放在那里!我将使用此解决方案。
readlink(“/proc/self/exe”)
-或者使用一些库,例如Qt,它提供了
QCoreApplication::applicationDirPath()
。UNIX的方法是将配置文件存储在已知目录中,与可执行文件的位置无关。通常,可执行文件由根用户安装在某处,并由一个或多个普通用户使用。这些用户可能有自己的私有配置文件,通常名为.appname.conf,并存储在用户的主目录中。默认配置文件通常位于/etc目录中。尽管我同意@BjornA。通常,有获取可执行文件目录的用例。我使用的一个方法是提供一个选项,通过将路径配置文件放置在构建树中的同一目录中,从构建目录调试可执行文件,同时不需要重新编译即可安装可执行文件,并让已安装的可执行文件从
/usr/share/
/usr/local/share/
@BjornA获取资源。谢谢,我知道配置文件存储在/etc/中,但我从未想过要将该文件放在那里!我将使用这个解决方案。我认为
/proc/
/proc/self
符号链接已经指向了规范化的路径名,因为内核实现是在反向名称映射中查找inode,或者类似的东西。我认为
/proc/