假设我编写一个程序,它在相对路径(而不是完整/绝对路径)下输出文件 - 比方说,当前路径。
然后我编译它并将可执行文件存储在某个目录下path1
。
现在我运行可执行文件,而我位于不同的 dir 下
path2
。可执行文件将输出一个文件,path2
而不是path1
.我想知道为什么可执行文件不写入文件
path1
?换句话说,为什么“当前路径”path2
不是path1
?如果在运行时,可执行文件打开存储在 中的文件
path3
,为什么当前路径会变成path3
,尽管我从 运行可执行文件path2
并且可执行文件存储在 中path1
?
在进程运行时,操作系统如何分配和更改进程的当前路径?
答案1
问题1: 为什么程序安装的目录不是程序运行时进程的初始目录?
其实程序的安装路径是无关紧要的,重要的是程序的当前路径父亲过程。对于从 shell 启动的程序,父进程是 shell 本身,因此新进程的初始当前目录是 shell 的当前目录。
问题2:进程如何在当前目录之外创建文件?
有两种方式给出文件的路径:绝对路径和相对路径。绝对路径从文件系统的根 ( /
) 开始解释,并以斜杠 (“/”) 开头。相对路径是从进程的当前目录解释的。因此,如果您有两个目录,例如/path2
和/path2/path3
,以及一个当前目录为 的进程path2
,则它可以打开一个文件path3/file
。该路径是相对路径(不以斜杠开头),因此它是从当前目录计算的path2
。最后,新文件的完整路径是/path2/path3/file
.因此,在给定目录中运行的进程可能会在该目录之外创建文件。
问题3:操作系统如何在进程运行期间分配和更改进程的当前路径?
进程可以通过系统调用请求操作系统更改其当前目录chdir(2)
(前提是它需要新目录的权限等)。这是一种不同的机制,与打开文件无关。打开文件是通过另一个系统调用(即open(2)
)完成的。