如果我在/usr/bin
中有一个可执行文件当我位于 ~/dev/wikis/
时调用它(即 user@HAL:~/dev/wikis$ the_executable
), ioutil.ReadFile("file.txt")
可执行文件中的函数将在 /home/user/dev/wikis/file.txt
中查找,但是有可能让它看起来在 /usr/bin/file.txt
中吗?相反,用户或开发人员事先不知道可执行文件将位于 /usr/bin
(它也可以位于 /home/user/dev/my_program/the_executable
)?
然后为了增加一层复杂性,另一种情况是,假设我从 /usr/bin
中的符号链接(symbolic link)调用可执行文件。可执行文件的“源”实际上位于/home/user/dev/my_program/the_executable
中,我希望程序了解 /home/user/dev/my_program/
在这种情况下,是动态的,而不是 /usr/bin
.
简而言之:可执行文件如何动态解析其在文件系统上的位置或其实际“休息位置”与用户的工作目录(可以通过 os.Getwd()
轻松获取,并且其他命令如 ioutil.ReadFile
使用或使用类似的命令来解析路径)。
我最好的选择是,我必须获取正在运行的程序的 PID ( os.Getpid
),然后以某种方式使用该整数来访问有关在该 PID 下运行的程序实例的信息,并希望该信息包含一个字符串然后我就可以使用它的目录了。
最佳答案
在 Linux 中(也许在其他 Unixy 系统中),您会在 /proc/pid/exe
下找到一个指向以 pid
身份运行的实际可执行文件的符号链接(symbolic link),检查如果它是二进制文件,它就会给出你想要的东西。如果它是某种脚本,那可能只会给解释器。
但请注意,完全有可能启动一个进程并在运行时删除可执行文件,留下悬空链接或什么都不留下。
关于linux - 可执行文件可以动态解析其在文件系统上的位置或其实际的 "resting place"与用户的工作目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160412/