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

dsi*_*cha 4 filesystems multithreading operating-system d thread-local

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

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

Ric*_*arn 8

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

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

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


Eug*_*its 7

当前目录由操作系统维护,而不是由语言或框架维护.有关详细信息,请参阅GetCurrentDirectory WinAPI函数的说明.

来自描述:

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

  • +1:OS甚至不需要*拥有*当前目录.甚至还有目录.'filesystem'可以是一个键/值DB,它允许你在键中放置冒号,斜杠和反斜杠只是为了它的乐趣,但实际上并不关心. (3认同)