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

问题描述:

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

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

要改变你应该使用chdir当前目录:

int chdir(const char *path); 

如果成功则返回0

你不能有以下几个原因使用EXECL:

  1. cd一般贝壳内建命令;
  2. 在大多数系统上/bin/cd不存在;在具有它的极少数系统上,它会更改当前目录,然后生成子shell进程;
  3. 当前目录是一个进程的属性:如果您使用/bin/cd更改当前目录,则在进程终止后立即丢失目录更改;
  4. 如果您使用exec系列的功能,则当前过程映像会被替换为新的过程映像 - 您可以使用system,但不能解决前面的3个问题。
+0

这不回答这个问题。有些课堂作业有严格的规定,你需要使用exec而不是chdir。 – User 2015-03-16 04:29:25

+0

然后,某些类别分配具有与POSIX标准互斥的严格规则。 – 2015-03-18 00:47:01

你正在做什么都不行,因为exec家人通话将实际在当前进程替换当前的计划。换句话说,您将被终止,因此,当cd完成后,您的父级过程将再次接管。

如果要更改当前进程的工作目录,请使用chdir。如果您想在退出时更改它,那么您的运气不好,因为您的程序本身正在与启动它的父进程分开运行。

所以,除非你与父母有某种形式的沟通,否则这是行不通的。