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

    xiaoxiao2021-12-14  23

    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 函数掌握当前工作目录的概念知道当前工作目录是进程的属性
    转载请注明原文地址: https://ju.6miu.com/read-971726.html

    最新回复(0)