当程序访问文件,使用system()
等时,该程序的当前工作目录的物理知识/存储方式和位置在哪里?从逻辑上讲,程序的工作目录类似于全局变量,理想情况下它应该是线程本地的,特别是在像D这样的语言中,默认情况下“全局”变量是线程局部的。是否可以使程序的当前工作目录成为本地线程?
注意:如果你不熟悉D,那么即使是与语言无关的答案也会有用。
答案 0 :(得分:7)
当前目录由操作系统维护,而不是由语言或框架维护。有关详细信息,请参阅description of GetCurrentDirectory WinAPI function。
来自说明:
多线程应用程序和共享 库代码不应该使用 GetCurrentDirectory函数和 应避免使用相对路径 名。当前目录状态 由SetCurrentDirectory编写 函数存储为全局 因此,每个过程都有变量 多线程应用程序不能 无需可靠地使用此值 其他可能的数据损坏 线程也可能正在阅读或 设置此值。
答案 1 :(得分:7)
在Linux上,每个进程都由进程描述符 - task_struct
表示。此结构在内核源代码中的include/linux/sched.h中定义。
task_struct
的一个字段是指向fs_struct
的指针,它存储与文件系统相关的信息。 fs_struct
中定义了fs_struct
。
pwd
有一个名为{{1}}的字段,它存储有关当前工作目录的信息(它所在的文件系统以及目录本身的详细信息)。