【问题标题】:How/where is the working directory of a program stored?程序的工作目录如何/在哪里存储?
【发布时间】:2011-04-16 10:32:51
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    当前目录由操作系统维护,而不是由语言或框架维护。详情请见description of GetCurrentDirectory WinAPI function

    来自描述:

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

    【讨论】:

    • +1:操作系统甚至不需要拥有当前目录。甚至根本没有目录。 “文件系统”可能是一个键/值数据库,它允许您将冒号、斜杠和反斜杠放在键中,只是为了好玩,但实际上并不关心。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2013-11-20
      相关资源
      最近更新 更多