2014-11-04 182 views
0

我試圖改變用c語言我的Linux終端的目錄更改終端目錄。事情是我正在使用線程。我試圖使用chdir(),但它不工作,n是的,chdir()也是一個過程函數。 其實我想實現的事情是,我試圖做一個多線程程序,編譯Linux內核,而這是不可能的,而無需指定目錄(我試圖做到這一點,而無需指定目錄,但失敗了:))用c語言

有人可以幫我解決這個問題嗎?

在此先感謝:)

+0

給你正在使用可能會有所幫助一些示例代碼。我的理解是,默認情況下,Linux內核配置會創建一個Makefile,然後可以使用帶有N個make作業的'make -jn'並行創建。假設這是不可能的(出於某種原因,也許描述?)我猜想可以從某個「父」構建目錄中使用相對路徑的類似方法? – chrisb2244 2014-11-04 07:46:02

+0

爲什麼'chdir()'不起作用?你可以發佈更多的細節,比如errno失敗或者它不改變你的目錄嗎? – SSC 2014-11-04 07:48:39

+0

CHDIR()就如同沒有happended ..沒有錯誤沒有目錄改變什麼都沒有..沒有什麼都沒有 – user2353613 2014-11-04 07:50:56

回答

4

你不能!沒有進程可以改變另一個的工作目錄。一個進程只能改變自己的WD。當你啓動一個像C程序那樣的外部命令時,就會啓動一個新的進程。 您的shell的cd命令是內部命令。

+0

我不是在使用進程..我正在處理線程。 – user2353613 2014-11-04 08:26:12

+0

必須有一些方法來使用c:來改變路徑。 – user2353613 2014-11-04 08:26:31

+1

線程只是進程的一部分,每個進程只有一個當前目錄。更改線程中的當前目錄會更改整個進程的當前目錄。這不被推薦。 – 2014-11-04 11:01:25

0

這不是很清楚你想達到的目標。看來,在某種程度上,你希望效仿使用C程序的腳本(或make工具)的行爲,也就是說有你寫推出新工藝的C程序(使用system或也許forkexec*的組合)。如果是這樣的話,那麼你真正想要的是修改這些進程的環境變量,以便他們找到他們需要的文件。分叉進程將繼承其父的環境,因此,所有你需要的是使用getenvputenvsetenvunsetenv來檢索和設置要添加,更新或刪除的環境變量;或者您可以使用特定的execve,execvpe,它們可以讓您準確指定應該爲新程序提供什麼樣的環境。

引用: