我正在使用chdir()
将目录更改为作为此函数的参数传递的值。
我理解当我使用gcc myCd.c
和./a.out ..
运行我的C程序时,这会将目录更改为父目录"在" C程序(即为a.out进程生成子进程,并且在该子进程内发生目录更改)。
我想要做的是,使用此C程序更改终端上的目录。我尝试为它编写一个shell脚本,然后运行它,然后运行,这是有效的,但我想用C来实现。
答案 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
}