在 Linux 上获取程序的目录
Getting the program's directory on Linux
我想知道如何在Linux上获取我的程序目录。例如,如果我的程序位于/home/myproject/
下并且我得到了目录,那么无论我从哪个目录调用程序,都应该/home/myproject/
它。我需要此功能,因为我需要能够访问与我的程序位于同一文件夹下的配置文件,无论程序的文件夹位于何处。
我试过使用getcwd()
,但这是它的作用:
如果我目前与程序位于同一文件夹中,它将起作用。但是,如果我在/root
并尝试执行位于/home/myproject
下的程序,它会给我/root
。
如果我只是做这样的事情...
std::ifstream is("anotherfile");
只要我在同一个目录中,它就可以工作,但是当我不在时,它的作用与上面相同。
在 Linux 上,您可以使用/proc/
.仔细阅读 proc(5)。
我建议使用 readlink(2) 读取/proc/self/exe
中的符号链接。它给你的可执行文件。你可以在它上面使用 dirname(3) 来获取它的目录。还要注意 realpath(3),它可能有用(实际上不是,因为正如 Daniel Schepler 所评论的那样,/proc/self/exe
是一个规范路径......
这是特定于 Linux 的,在极少数病理情况下不起作用(您的可执行文件在执行过程中被删除或重命名)。看到这里。
请记住,Linux 没有文件夹(它们只是一个 GUI 工件),而是目录。参见 opendir(3)、readdir(3)、closedir(3)、stat(2)、nftw(3) 等。
最后,Unix的传统是将用户特定的配置文件保存在$HOME
下(通常带有隐藏的点文件,例如$HOME/.inputrc
) 和/etc/
下的系统范围配置文件。你可以使用 getenv(3) 作为getenv("HOME")
获得$HOME
。参见环境(7)。在病理情况下,这种getenv
可能会失败。
顺便说一句,如果设置了某些特定的环境变量,您甚至可以采用getenv
测试约定(例如MYPROGCONFIG
),如果已设置,请将其用作配置文件。不要忘记记录此类约定。
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 可视化如何使用C++程序获取DHCPV6服务器IP.我尝试使用DHCPv6RequestParams,但总是收到错误代码
- 从后台处理程序获取作业 - C++
- 使用非静态消息处理程序获取GSTREAMER总线消息
- 为C程序获取不同的输出?该程序应该输出什么
- C 程序获取细分故障
- 如何从 win32 控制台应用程序获取输入
- MFC C++正在从WM_KEYDOWN处理程序获取在OnDraw()中编辑的CDC pDC的句柄
- 我正在尝试使我的 2-D 数组程序获取每行中最大的元素,但它不起作用
- 在运行时从应用程序获取PE标头时发生运行时错误
- 从 C++ 中的 POSIX 信号处理程序获取对象属性
- 在进行安装时,构建应用程序获取 ISO c 不允许命名可变
- Qt如何让应用程序获取自身的md5校验和
- 从Qt应用程序获取原始数据包数据
- 如何使用 gnu c++ 程序获取共享对象文件(.so 文件)的体系结构
- 如何在发布模式下从程序获取 isapi dll 物理路径
- 使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但不起作用
- 从自己的程序获取程序元数据
- 如何从Adobe AIR应用程序获取HDC或ScreenShot
- 简单程序获取LNK2019:未解析的外部符号Visual Studio 2013