5

私の質問は: 他の pthread の現在のディレクトリを変更せずに pthread の現在のディレクトリを変更するにはどうすればよいですか? 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 に答える