如何/存储程序的工作目录?

时间:2010-09-23 18:40:07

标签: multithreading operating-system filesystems d thread-local

当程序访问文件,使用system()等时,该程序的当前工作目录的物理知识/存储方式和位置在哪里?从逻辑上讲,程序的工作目录类似于全局变量,理想情况下它应该是线程本地的,特别是在像D这样的语言中,默认情况下“全局”变量是线程局部的。是否可以使程序的当前工作目录成为本地线程?

注意:如果你不熟悉D,那么即使是与语言无关的答案也会有用。

2 个答案:

答案 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}}的字段,它存储有关当前工作目录的信息(它所在的文件系统以及目录本身的详细信息)。

相关问题