如何使用C程序中的exec命令更改目录?

时间:2010-09-24 08:16:13

标签: c unix

我必须从我的C程序更改工作目录。为此,我使用了以下命令:     execl("/bin/cd","cd","..",(char*)0); 但是这个命令没有改变目录?      这个命令有什么问题,还是有其他方法可以从C程序中更改工作目录?

3 个答案:

答案 0 :(得分:10)

要更改当前目录,您应该使用chdir

int chdir(const char *path);

成功时返回0.

由于以下几个原因,您无法使用execl:

  1. cd通常是shell内置命令;
  2. 在大多数系统/bin/cd上不存在;在极少数拥有它的系统上,它会更改当前目录,然后生成子shell进程;
  3. 当前目录是进程'属性:如果使用/bin/cd更改当前目录,则只要进程终止,就会丢失目录更改;
  4. 如果您使用exec系列中的某个功能,则当前过程映像将替换为新的过程映像 - 您可以使用system,但不会解决之前的3个问题。

答案 1 :(得分:2)

您正在执行的操作无效,因为exec系列调用实际上会在当前进程中替换您当前的程序。换句话说,您将被终止,以便在cd完成后,进程将再次接管。

如果要更改当前进程的工作目录,请使用chdir。如果你想在退出时更改它,那你就不走运了,因为你的程序本身是在与启动程序的父程序不同的进程中运行的。

所以,除非你与父母有某种形式的沟通,否则这不会起作用。

答案 2 :(得分:1)

您需要使用chdir系统调用来更改调用进程的工作目录。