【问题标题】:How can I use chdir function in Linux?如何在 Linux 中使用 chdir 函数?
【发布时间】:2015-09-10 14:00:46
【问题描述】:

我有一个问题,这是我在 testchdir.c 文件中的原始代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc,char **argv) 
{ 
    if (argc < 2)
    {
        printf("Usage: %s <pathname\n",argv[0]);
        exit(1);
    }

    if (chdir(argv[1]) == 0)
    {
        printf("success in chdir\n");
        return 0;
    }
    else
    {
        printf("error happened");
        exit(1);
    }
}

在我的Linux系统中,我的原始路径是/home/Tom3543,然后当我使用gcc -o testchdir testchdir.c编译上面的代码时,它看起来不错。稍后,我想改变我的路径并执行程序,所以我输入

./testchdir /home/tom3543/C++

“success in chdir”出现在我的终端中,但我的路径仍然是 /home/Tom3543 在我的终端中。有人可以帮我解释为什么吗?我对此感到困惑!

【问题讨论】:

  • 注意:请使用正确的缩进/格式。

标签: c linux unix chdir


【解决方案1】:

这是因为 shell 为您的程序启动了一个 new 进程,而您只更改了该新进程中的当前目录。 shell 进程将不受影响。

不幸的是(对您而言)没有真正好的(或合法的)方法来更改父进程(shell 进程)的工作目录。

【讨论】:

  • 这也是为什么cd 不是外部程序而是内置于shell 本身的原因。
  • 不是“不幸”恕我直言——想象一下,如果运行命令也可能改变你的工作目录,那会是多么混乱!
  • 确实,这不仅是“幸运”,而且是一个非常有意、正确的设计决策。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多