我正在尝试编写一个简单的C ++程序来执行Linux命令。我坚持改变目录(像chdir
和cd
这样的命令不起作用)。这就是我到目前为止所做的:
system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");
答案 0 :(得分:4)
如果您要更改已调用程序的shell的目录(即cd
,即chdir(2) ...),则无法执行此操作。因此cd
必须是内置的bash(1)。
原因是chdir
仅影响调用进程(这将是您的C程序)而不影响父进程。每个进程都有自己的当前目录。
如果您致电system(3),它将fork(2)新的shell和execve(2) /bin/sh -c
,因此只有分叉的shell才能更改其当前目录。
您需要阅读Advanced Linux Programming。
也许您想直接在C程序中调用chdir
。这将影响当前进程和所有未来的子进程(包括那些以C代码中的system
或popen
库函数开头的进程),直到它们终止或进一步调用chdir
为止。但它不会影响终端中的shell(启动C程序的地方)。