Multithreading 程序的工作目录如何/在哪里存储?

Multithreading 程序的工作目录如何/在哪里存储?,multithreading,operating-system,filesystems,d,thread-local,Multithreading,Operating System,Filesystems,D,Thread Local,当程序访问文件、使用system()等时,该程序的当前工作目录在物理上是如何知道的/存储在哪里的?由于程序的工作目录在逻辑上类似于全局变量,因此理想情况下它应该是线程本地的,特别是在像D这样的语言中,“全局”变量默认为线程本地的。是否可以将程序线程的当前工作目录设置为本地 注意:如果您对D不太熟悉,即使是语言无关的答案也会很有用。当前目录由操作系统维护,而不是由语言或框架维护。有关详细信息,请参阅 从描述: 多线程应用程序和共享 库代码不应使用 GetCurrentDirectory函数和 应该

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


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

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

从描述:

多线程应用程序和共享 库代码不应使用 GetCurrentDirectory函数和 应该避免使用相对路径 名字。当前目录状态 由SetCurrentDirectory编写 函数存储为全局函数 因此,在每个过程中都是可变的 多线程应用程序无法运行 可靠地使用此值,而无需 其他系统可能导致数据损坏 也可能正在读取或删除的线程 设置此值


在Linux上,每个进程都由一个进程描述符表示—一个
task\u struct
。此结构在内核源代码中定义

task\u struct
的一个字段是指向存储文件系统相关信息的
fs\u struct
的指针<代码>fs_结构在中定义


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

+1:操作系统甚至不需要有当前目录。甚至有目录。“文件系统”可以是一个键/值数据库,允许您在键中放置冒号、斜杠和反斜杠,只是为了好玩,但实际上并不在意。