22-与目录有关的函数-chdir 与 getcwd

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 函数
  • 掌握当前工作目录的概念
  • 知道当前工作目录是进程的属性
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页