【发布时间】:2013-06-07 20:49:36
【问题描述】:
我的问题是: 如何在不更改其他 pthread 中的当前目录的情况下更改 pthread 中的当前目录,我找到了一个使用 openat() 函数的解决方案,但我没有找到任何解释它如何工作的示例。 使用 chdir() 更改进程中所有 pthread 中的当前目录。 感谢您的帮助。
【问题讨论】:
我的问题是: 如何在不更改其他 pthread 中的当前目录的情况下更改 pthread 中的当前目录,我找到了一个使用 openat() 函数的解决方案,但我没有找到任何解释它如何工作的示例。 使用 chdir() 更改进程中所有 pthread 中的当前目录。 感谢您的帮助。
【问题讨论】:
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); - 但这是不可移植的。
【讨论】: