通过C程序更改Shell的目录

提问

我正在尝试编写一个简单的C程序来执行Linux命令.我一直在更改目录(chdir和cd这样的命令不起作用).这是我到目前为止的内容:

system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");            

最佳答案

如果要更改已调用程序的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代码中的系统或popen库函数开头的子进程),直到它们终止或进一步调用chdir.但这不会影响终端(启动C程序的地方)中的外壳.