【问题标题】:Using chdir() to change directory from Terminal使用 chdir() 从终端更改目录
【发布时间】:2015-01-11 04:04:23
【问题描述】:

我正在使用chdir() 将目录更改为作为参数传递给此函数的值。

我了解,当我使用 gcc myCd.c./a.out .. 运行我的 C 程序时,这会将目录更改为 C 程序“内”的父目录(即为 a.out 进程生成一个子进程,并且目录更改发生在该子进程中)。

我想要做的是,使用这个 C 程序在终端更改目录。我尝试为此编写一个 shell 脚本,然后采购它并运行它,但我想使用 C 来实现这一点。

【问题讨论】:

  • 你能解释一下脚本的来源吗?
  • 在终端输入'源脚本名'非常相似'。 scriptname' 注意:'source' 并非在每种脚本语言中都可用。通常可以在 csh 和 bash 中找到
  • @Anton.P,通过采购我的意思的脚本,以以下两种方式之一运行脚本:1.. myScript.sh 2.source myScript.sh 但正如@user3629249 所指出的那样,它是并非在每种脚本语言中都可用。所以必须想出另一种出路!

标签: c shell chdir


【解决方案1】:

您尝试做的事情无法完成。 当前工作目录是每个进程的属性。

如果您运行的程序更改了它的cwd,它不会影响任何其他进程,除了它可能在chdir() 之后创建的任何子进程。

更改终端工作目录的正确方法是使用cd 命令,shell 代表您执行该命令并保持在同一进程中。即cd是shell不fork()的几个命令之一;这使得cd 命令按预期工作。

source一个shell文件使它在shell进程中运行。但是,如果您要在没有source 的情况下运行脚本,您会发现与使用 C 程序完全相同的问题:shell fork 为脚本创建一个运行进程,它运行然后退出,然后然后 shell 继续,但没有改变它的 cwd。

【讨论】:

    【解决方案2】:

    这是在 C 中更改当前工作目录的方法

    这需要包含unistd.h 头文件

    if( 0 != chdir( "pathToNewDirectory" ) )
    { // then chdir failed
        perror( "chdir failed" );
       // handle error
    }
    

    【讨论】:

    • 是的,这与我编写 C 程序的方式完全相同。并且正如本文引用的 cmets 和答案中所述,C 程序将作为一个单独的进程生成,并且不会更改父进程(终端)的目录
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多