我有一个调用 chdir() 来更改 cwd 的程序。但是,在程序完成后,cwd 会更改回调用程序的目录,而不是停留在调用 chdir() 指定的目录中。我编写了一个程序来测试 chdir() 是否实际上正在更改为指定的目录,并发现 chdir() 正在执行我的假设:在程序执行期间更改为指定的目录,然后返回到执行程序的目录。
这是测试的代码:
#include <stdio.h>
#include <unistd.h>
#define NAME_MAX 100
int main(int argc, char **argv)
{
char buf[NAME_MAX];
char *path = argv[1];
if (chdir(path) == -1) { /* change cwd to path */
fprintf(stderr, "error: could not change to dir %s\n", path);
return 1;
}
getcwd(buf, NAME_MAX);
printf("CWD is: %s\n", buf); /* print cwd as obtained from getcwd() */
return 0;
}
这是我终端的输出:
john@ubuntu:~/C/cli$ pwd
/home/john/C/cli
john@ubuntu:~/C/cli$ mkdir foobar
john@ubuntu:~/C/cli$ ./test.c foobar
CWD is: /home/john/C/cli/foobar
john@ubuntu:~/C/cli$ pwd
/home/john/C/cli
所以我的问题是,如何在程序完成后留在我在调用 chdir() 时指定的目录中?另外,我在 Ubuntu 12.04 上使用 gcc 进行编译。