6

当程序访问文件、使用system()等时,该程序的当前工作目录是如何以及在哪里物理上已知/存储的?由于逻辑上程序的工作目录类似于全局变量,因此理想情况下它应该是线程局部的,尤其是在像 D 这样的语言中,“全局”变量默认是线程局部的。是否可以将程序线程的当前工作目录设为本地?

注意:如果您不特别熟悉 D,即使是与语言无关的答案也会很有用。

4

2 回答 2

13

在 Linux 上,每个进程都由一个进程描述符 - a 表示task_struct。这个结构在内核源代码的include/linux/sched.h中定义。

的字段之一task_struct是指向 的指针fs_struct,它存储与文件系统相关的信息。fs_structinclude/linux/fs_struct.h中定义。

fs_struct有一个名为 的字段pwd,它存储有关当前工作目录的信息(它所在的文件系统,以及目录本身的详细信息)。

于 2010-09-23T18:57:01.880 回答
8

当前目录由操作系统维护,而不是由语言或框架维护。有关详细信息,请参阅GetCurrentDirectory WinAPI 函数的说明。

从描述:

多线程应用程序和共享库代码不应使用 GetCurrentDirectory 函数,并且应避免使用相对路径名。由 SetCurrentDirectory 函数写入的当前目录状态在每个进程中存储为全局变量,因此多线程应用程序无法可靠地使用该值,而其他线程也可能正在读取或设置该值,而不会损坏该值。

于 2010-09-23T18:45:54.907 回答