2013-07-11 55 views
0

我的Mac OS命令行应用程序发出的Unix调用如:命令行应用程序:Unix的cd命令

system("rm -rf /Users/stu/Developer/file); 

完全成功。

那么,为什么下面不改变当前目录?

system("cd /Users/me/whatever"); 
system("pwd"); //cd has not changed 

回答

4

由于

system()通过调用/bin/sh -ccommand执行命令指定的命令,并且该命令之后返回已经完成。

因此,每个命令都独立执行,每个命令都在shell的新实例中执行。

因此,您的第一个电话会产生一个新的sh(包含您当前的工作目录),更改目录,然后退出。然后第二个电话产生一个新的sh(再次在您的CWD中)。

请参阅man page for system()


更好的解决方案是to not use system。它有一些固有的缺陷,可以让你面对安全漏洞。而不是执行system()命令,您应该使用等效的POSIX C函数。 一切,你可以在命令行做的,你可以用C函数做(你觉得如何将这些公用事业工作?)

  • 代替system("rm -rf ...")使用this
  • 而不是system("cd ...")使用chdir()
  • 而不是system("pwd ...")使用getcwd()

当然有一些不同之处,但这些是您尝试去做的基本等价物。

+0

谢谢,这将是一个巨大的帮助。有些阅读时间... – HenryRootTwo