2014-02-05 28 views
1

我正在嘗試編寫一個簡單的C++程序來執行Linux命令。我一直在改變目錄(像chdircd這樣的命令不起作用)。這是我到目前爲止有:通過C++程序更改shell的目錄

system("echo -n '1. Current Directory is '; pwd"); 
system("chdir Desktop");    
+1

系統產生一個新的shell。所以到它關閉時改變的目錄沒有任何作用。 – RedX

回答

4

這是不可能的,如果你想更改目錄(即cd,即chdir(2) ...)已調用程序的外殼。所以cd必須是內建的bash(1)

原因是chdir隻影響調用進程(這將是你的C程序)而不是父進程。每個進程都有自己的當前目錄。

如果你打電話給system(3)它會將fork(2)一個新的shell和execve(2)/bin/sh -c所以只有分叉的shell可以改變它的當前目錄。您需要閱讀Advanced Linux Programming

也許你想直接在C程序中調用chdir。這將影響當前進程和所有將來的子進程(包括C代碼中的systempopen庫函數開始的那些進程),直到它們終止或進一步調用chdir。但它不會影響終端中的shell(你開始C程序的地方)。

+0

所以,你的意思是這根本不可能? – user1779646

+0

是的,我只是解釋了爲什麼這是不可能的。請閱讀參考資料。 –