如何在 Linux/Unix 上获取 C++ 中的应用程序目录。getcwd()
返回运行应用程序的目录,但我想要构建所在的实际目录。
我知道你可以从那里得到这个,main()
但我真的无法访问它,而且我被告知你不能依赖它(这是真的吗?)。
通常,在 unix 系统中,您甚至不能假设存在仍然指向可执行文件的文件或目录。例如,文件/目录可能在程序运行时被删除(这在 windows 中是不可能的,但在 unix/linux 中不是问题)。另一方面,可能有多个名称指向同一个物理文件(硬链接),其中没有一个是主要文件……在这种情况下,文件的“名称”是什么?
没有安全的可移植方式来获取程序的名称,因为可以有很多名称或根本没有指向该程序的名称。如果您必须找到程序的名称,则意味着您正在尝试做错事,并且可能有更好的解决方案。
编辑:
虽然没有适用于所有 *x 系统的通用可移植方法,但在 linux 下,您可以使用该名称/proc/self/exe
打开可执行文件。即使文件不再被任何目录指向(例如,即使文件在运行时已被“删除”),这也将起作用。如果进程仍在运行,则正在运行的进程的实际文件(inode)将始终可用,可能缺少的是文件的名称(即指向该 inode 的目录列表)。
argv[0] 将为您提供可执行文件的完整路径 - 不知道这是否是通用标准