C ++获取应用程序目录* NIX

时间:2011-02-19 16:11:26

标签: c++ linux unix directory cwd

如何在Linux / Unix上使用C ++获取应用程序目录。 getcwd()返回运行应用程序的目录,但我想要构建所在的实际目录。

我知道你可以从main()得到这个,但我真的无法访问它,而且我被告知你不能依赖它(这是真的吗?)。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

通常在unix系统中,您不能假设甚至有一个文件或目录仍然指向可执行文件。例如,文件/目录可能在程序运行时被删除(这在Windows中是不可能的,但在unix / linux中不是问题)。另一方面,可能有多个名称指向相同的物理文件(硬链接),其中没有一个是主要文件...在这种情况下,文件的“名称”是什么?

没有安全的可移植方式来获取程序的名称,因为可能有许多名称或根本没有指向程序的名称。如果你必须找到程序的名称,这意味着你正在尝试做错事,这可能是一个更好的解决方案。

编辑:

虽然对于所有* x系统没有通用的可移植方法,但在linux下,您可以使用名称/proc/self/exe打开可执行文件。即使文件不再被任何目录指向(即使文件在运行时已被“删除”),这也将起作用。如果进程仍在运行,则正在运行的进程的实际文件(inode)将始终可用,可能缺少的是文件的名称(即指向该inode的目录列表)。

答案 2 :(得分:0)

argv [0]将为您提供可执行文件的完整路径 - 不知道这是否是一般标准