2013-06-11 70 views
1

我的問題是: 如何在不更改其他pthreads中的當前目錄的情況下更改pthread中的當前目錄,我找到了使用openat()函數的解決方案,但未找到任何解釋它如何工作的例子。 使用chdir()更改進程中所有pthread中的當前目錄。 謝謝你的幫助。在pthread中更改目錄

回答

4

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的方式可以讓當前線程擁有自己當前的工作目錄,與進程的其餘部分分離 - 但這不是可移植的。

+0

非常感謝,我在linux上工作,取消共享功能是完美的。 –