【问题标题】:chdir system call in C program [duplicate]C程序中的chdir系统调用[重复]
【发布时间】:2016-01-13 09:35:19
【问题描述】:

程序:

    #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遵循fork on exec机制。所以,它不会影响当前的 shell。

有吗 有什么方法可以通过这些程序更改 shell 的当前工作目录,比如 shell 使用的内置 (cd, echo) 命令?

【问题讨论】:

  • 有一个原因cd 是内置的;它不能通过单独的进程来实现。

标签: c linux bash shell unix


【解决方案1】:

有没有办法通过shell使用的buildin(cd,echo)命令等程序来改变shell的当前工作目录。

你不能这样做。

允许子进程更改父进程的当前目录或与此相关的任何状态将对父进程造成严重破坏。

【讨论】:

  • 那么内置命令是如何实现的呢?
  • @mrg,内置命令由shell解释,shell可以改变自己的状态。
  • @mrg 这就是为什么它们是内置的。当您键入cd 时,shell 会调用chdir() 本身,它不会将其作为程序运行。
  • @Barmar Bash 也是一个用 C 语言编写的独立程序。那怎么可能呢?所以,我们不能这样做。对吗?
  • @mrg Bash 正在更改自己的目录,就像您的程序一样。它不会更改其父进程的目录。当它运行程序时,那些是子进程,它们从父进程继承目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2013-06-25
  • 2011-02-26
相关资源
最近更新 更多