【问题标题】:Is that command valid in C?该命令在C中有效吗?
【发布时间】:2013-06-05 06:16:20
【问题描述】:

我想使用 C 文件中的代码更改 unix 中的目录。我试过这个:

 char command[50];
 strcpy( command, "cd newdirectory/" );
 system(command);

但它没有工作。使用“系统”的其他命令工作。

【问题讨论】:

  • 您的命令会起作用,但只能在 system() 调用中起作用。即如果你这样做system("cd newdirectory && rm foo");rm foo 将发生在newdirectory
  • @zmo 这就是问题所在。我不知道它可以执行命令但仍保留在当前目录中。您可以将其作为答案(正确)

标签: c linux bash shell directory


【解决方案1】:
【解决方案2】:

您的命令会起作用,但只能在 system() 调用中使用。 例如:如果你这样做system("cd newdirectory && rm foo");rm foo 将发生在newdirectory

那是因为 system() 调用会执行 fork() 更改环境,但是当它返回到调用程序时,您会返回到原始环境。

要更改当前进程的目录,您必须按照 user1929959 的回答:使用chdir() 系统调用。

【讨论】:

  • 这缺少一个关键元素。 system fork 一个子进程,然后它是执行 shell 并运行 cd 命令的子进程。因为这发生在子进程中,它会影响子进程的环境,但甚至不会触及调用进程的环境。它不会“回到”原始环境,调用进程从未离开它。
  • cf man page,你没看错,确实是fork()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2017-08-17
  • 1970-01-01
  • 2014-10-20
  • 2020-11-12
相关资源
最近更新 更多