chdir
这个命令类似于 linux 的命令 cd
,而 getcwd
有点像 pwd
。
1 先入为主
也许你自认为对 cd 命令和 pwd 命令相当熟悉了,那么,先看下面的例子。
1.1 代码
- 函数原型
int chdir(const char *path);
char *getcwd(char *buf, size_t size);
- 实例
这段代码的目的是实现一个类似 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;
}
1.2 编译
$ gcc mychdir.c -o mychdir
1.3 测试
- 查看当前目录
$ pwd
/home/allen/learninglinux/filesystem/dir
- 执行 mychdir
$ mkdir testdir // 创建一个目录
$ ./mychdir testdir
结果显示为:
current dir: /home/allen/learninglinux/filesystem/dir/testdir
这个结果也是我们期望看到的。
- 再次 pwd
可是当你再次执行 pwd
时,你会发现,你的当前目录仍然没有变化。
$ pwd
/home/allen/learninglinux/filesystem/dir
到这里你或许会疑惑,是 chdir 执行失败了吗?不不不,没有,你需要了解什么叫当前工作目录。
2 当前工作目录
当前工作目录是针对进程而言的,它是进程的属性。所以,当你调用 mychdir 这个程序的时候,改变的也只是 mychdir 这个进程的当前工作目录。
当你使用 pwd
的时候,看到的只是当前 shell 这个进程的当前工作目录。而cd
命令是内置在 shell 里头的,所以你使用 cd
命令,改变的是当前 shell 进程的当前工作目录。
3 总结
- 掌握 chdir 和 getcwd 函数
- 掌握当前工作目录的概念
- 知道当前工作目录是进程的属性