2010-09-23 41 views
4

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

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

回答

7

当前目录由OS维护,而不是语言或框架。详情请参阅description of GetCurrentDirectory WinAPI function

从描述:

多线程应用程序和共享 库代码不应该使用 GetCurrentDirectory功能和 应避免使用相对路径 名。由SetCurrentDirectory 函数写入的当前目录状态 被存储为在每个处理一个全局 变量,因此 多线程应用程序不能 可靠地使用此值,而无需从其他 线程还可以读取 可能的数据损坏或 设置此值。

+3

+1:此外操作系统甚至不需要*拥有当前目录。甚至有目录。 '文件系统'可以是一个键/值数据库,它可以让你在密钥中输入冒号,斜杠和反斜杠,只是为了它的乐趣,但实际上并不关心。 – 2010-09-23 18:50:07

7

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

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

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

相关问题