如何在Linux中使用它的相对路径打开文件?

Bur*_*ard 7 c c++ linux path

我有一个程序,通过使用相对路径(例如'..')打开文件.

现在问题是,当我从另一个目录执行程序时,相对路径不是相对于程序而是相对于工作目录.因此,如果我使用'/ path/to/program/myprog'启动程序,则无法找到该文件.

有没有办法独立于工作目录执行程序?Id est,as如果工作目录是程序所在的目录?或者我只是以一种过于复杂的方式思考,并且有一种更简单的方式来引用文件,哪个位置只能通过相对于程序文件路径的路径来识别?

小智 4

如果程序本身不这样做,那么它就是一个糟糕的程序。糟糕的程序应该用一些 Bash 脚本来包装:

#!/bin/bash

set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*
Run Code Online (Sandbox Code Playgroud)

上面的脚本确定它所在的目录,然后将当前工作目录更改为该目录并从那里运行程序myprog,透明地传递所有参数。因此,您必须将此脚本放入您的程序所在的同一目录中并运行它而不是您的程序。

假设您有权访问源代码并且可以修复程序,然后使用proc fs确定程序的位置,然后使用绝对路径。

例如,/proc/self/exe始终是指向当前进程的二进制文件的符号链接。使用readlink读取它的值,然后剪切可执行文件名称,你就得到了目录。

  • 是的,这是一种不好的做法。但是,如果程序足够愚蠢,可以使用硬编码的相对路径来访问文件,并且您无法真正修复代码,那么这是可行的方法之一。它还取决于程序正在做什么等。其他解决方案可能是从其他目录运行它,并只提供它期望的相对路径中的所有文件。 (2认同)