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