我正在嘗試編寫一個簡單的C++程序來執行Linux命令。我一直在改變目錄(像chdir
和cd
這樣的命令不起作用)。這是我到目前爲止有:通過C++程序更改shell的目錄
system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");
我正在嘗試編寫一個簡單的C++程序來執行Linux命令。我一直在改變目錄(像chdir
和cd
這樣的命令不起作用)。這是我到目前爲止有:通過C++程序更改shell的目錄
system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");
這是不可能的,如果你想更改目錄(即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代碼中的system
或popen
庫函數開始的那些進程),直到它們終止或進一步調用chdir
。但它不會影響終端中的shell(你開始C程序的地方)。
所以,你的意思是這根本不可能? – user1779646
是的,我只是解釋了爲什麼這是不可能的。請閱讀參考資料。 –
系統產生一個新的shell。所以到它關閉時改變的目錄沒有任何作用。 – RedX