chdir 这个命令类似于 linux 的命令 cd,而 getcwd 有点像 pwd。
也许你自认为对 cd 命令和 pwd 命令相当熟悉了,那么,先看下面的例子。
这段代码的目的是实现一个类似 cd 的命令,同时打印 cd 后的目录。
// mychdir.c #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { if (chdir(argv[1]) == -1) { // 将当前工作目录切换到 argv[1](从命令行传进来的路径) perror("chdir"); return -1; } printf("current dir: %s\n", getcwd(NULL, 0)); // getcwd 用来获取当前工作目录 return 0; }结果显示为:
current dir: /home/allen/learninglinux/filesystem/dir/testdir这个结果也是我们期望看到的。
再次 pwd可是当你再次执行 pwd 时,你会发现,你的当前目录仍然没有变化。
$ pwd /home/allen/learninglinux/filesystem/dir到这里你或许会疑惑,是 chdir 执行失败了吗?不不不,没有,你需要了解什么叫当前工作目录。
当前工作目录是针对进程而言的,它是进程的属性。所以,当你调用 mychdir 这个程序的时候,改变的也只是 mychdir 这个进程的当前工作目录。
当你使用 pwd 的时候,看到的只是当前 shell 这个进程的当前工作目录。而cd命令是内置在 shell 里头的,所以你使用 cd 命令,改变的是当前 shell 进程的当前工作目录。
