2015-10-15 83 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