5

我的问题是:如何在不更改其他 pthread 中的当前目录的情况下更改 pthread 中的当前目录,我找到了一个使用 openat() 函数的解决方案,但我没有找到任何解释它如何工作的示例。使用 chdir() 更改进程中所有 pthread 中的当前目录。感谢您的任何帮助。

4

1 回答 1

9

openat()方法是更改​​当前工作目录的替代方法。而不是调用:

chdir("/new/working/directory");
open("some/relative/path", flags);

你改为使用:

dirfd = open("/new/working/directory", O_RDONLY | O_CLOEXEC);
openat(dirfd, "some/relative/path", flags);

这是避免更改线程中进程范围的当前工作目录但仍使用相对路径的 POSIX 标准方法。

还有一种特定于 Linux 的方法可以为当前线程提供自己的当前工作目录,与进程的其余部分分开unshare(CLONE_FS);- 但这不是可移植的。

于 2013-06-12T05:53:28.697 回答