我必须从我的C程序更改工作目录。为此,我使用了以下命令:
execl("/bin/cd","cd","..",(char*)0);
但是这个命令没有改变目录?
这个命令有什么问题,还是有其他方法可以从C程序中更改工作目录?
答案 0 :(得分:10)
要更改当前目录,您应该使用chdir
:
int chdir(const char *path);
成功时返回0.
由于以下几个原因,您无法使用execl:
cd
通常是shell内置命令; /bin/cd
上不存在;在极少数拥有它的系统上,它会更改当前目录,然后生成子shell进程; /bin/cd
更改当前目录,则只要进程终止,就会丢失目录更改; exec
系列中的某个功能,则当前过程映像将替换为新的过程映像 - 您可以使用system
,但不会解决之前的3个问题。答案 1 :(得分:2)
您正在执行的操作无效,因为exec
系列调用实际上会在当前进程中替换您当前的程序。换句话说,您将被终止,以便在cd
完成后,父进程将再次接管。
如果要更改当前进程的工作目录,请使用chdir
。如果你想在退出时更改它,那你就不走运了,因为你的程序本身是在与启动程序的父程序不同的进程中运行的。
所以,除非你与父母有某种形式的沟通,否则这不会起作用。
答案 2 :(得分:1)
您需要使用chdir
系统调用来更改调用进程的工作目录。