2015-10-15 91 views
0

程序:CHDIR系統調用在C程序

#include<stdio.h> 
    #include<unistd.h> 
    int main() 
    { 
     char s[100]; 
     printf("%s\n",getcwd(s,100)); 
     chdir(".."); 
     printf("%s\n",getcwd(s,100)); 
     return 0; 
    } 

輸出:

$ ./a.out 
    /home/guest 
    /home 
    $ 

上述程序改變處理的工作目錄。但是,它不會更改當前shell的工作目錄。因爲當程序在shell中執行時,shell會遵循exec機制的fork。所以,它不會影響當前的shell。

是否有 任何方式通過這些程序來改變shell的當前工作目錄,就像shell使用的內置(cd,echo)命令一樣?

+1

有一個原因'CD'是一個內置的;它不能通過單獨的過程來實施。 –

回答

1

有什麼辦法通過shell使用的buildin(cd,echo)命令來改變shell的當前工作目錄。

你不能做到這一點。

允許一個子進程來改變當前目錄,或任何國家就此而言,父進程會發泄對父進程的破壞。

+0

那麼如何實現內置命令? – mrg

+3

@mrg,內置命令由shell解釋並且shell可以更改自己的狀態。 –

+3

@mrg這就是爲什麼它們是內置的。當你鍵入'cd'時,shell會自己調用'chdir()',它不會將其作爲程序運行。 – Barmar