使用chdir()从终端更改目录

时间:2015-01-11 04:04:24

标签: c shell chdir

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

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

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

2 个答案:

答案 0 :(得分:3)

你要做的事情是无法做到的。 当前工作目录是每个进程的属性。

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

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

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

答案 1 :(得分:1)

这是更改C

中当前工作目录的方法

这需要包含unistd.h头文件

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