【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取

简介: 【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取

Linux目录操作:创建、删除与读取

1. 创建目录:mkdir与mkdirat

1.1 函数原型

int mkdir(const char *pathname, mode_t mode);
int mkdirat(int dirfd, const char *pathname, mode_t mode);

这两个函数用于创建一个新的空目录。其中,.(当前目录)..(父目录)是自动创建的。

  • pathname:要创建的目录的路径(Path of the directory to create)。
  • mode:文件访问权限(File access permissions)。
  • dirfd:文件描述符,用于mkdirat函数(File descriptor for mkdirat)。

1.2 返回值

  • 成功:返回0(Success: Returns 0)
  • 出错:返回-1,并设置errno值(Error: Returns -1 and sets errno

1.3 示例代码

#include <sys/stat.h>
#include <stdio.h>
int main() {
    if (mkdir("new_directory", 0777) == 0) {
        printf("Directory created successfully.\n");
    } else {
        perror("mkdir");
    }
    return 0;
}

这段代码创建了一个名为new_directory的新目录,并设置了0777的权限。

1.4 深度见解

在创建目录时,我们不仅仅是在文件系统中分配了一个新的空间,实际上也是在构建一个组织信息的结构。这与人类社会中的组织结构有异曲同工之妙。

正如Bjarne Stroustrup在《The C++ Programming Language》中所说:“Abstraction is selective ignorance.”

2. 删除目录:rmdir

2.1 函数原型与用法

int rmdir(const char *pathname);

这个函数用于删除一个空目录。

2.2 示例代码

#include <unistd.h>
#include <stdio.h>
int main() {
    if (rmdir("new_directory") == 0) {
        printf("Directory removed successfully.\n");
    } else {
        perror("rmdir");
    }
    return 0;
}

这段代码删除了一个名为new_directory的目录。

3. 读取目录

在Linux中,读取目录通常涉及到多个系统调用,如opendirreaddir等。这里不详细展开,但值得注意的是,符号链接的时间戳会影响到读取结果。

4. 总结

功能 函数 返回值 应用场景
创建目录 mkdir 0或-1 创建新目录
删除目录 rmdir 0或-1 删除空目录
读取目录 opendir等 - 读取目录

Linux系统中,目录操作是非常基础但又至关重要的。它不仅关乎文件系统的组织,也反映了信息管理的哲学。

正如Bjarne Stroustrup在《The C++ Programming Language》中所说:“The most important single aspect of software development is to be clear about what you are trying to build.”

这些目录操作函数在Linux内核源码中的具体实现通常位于fs(文件系统)子目录下。例如,在Linux 5.x版本中,mkdir的实现可能在fs/namei.c文件中。

希望这篇博客能帮助你更深入地理解Linux中的目录操作。

结语

在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。

这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。

我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。

目录
相关文章
|
2天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
23 3
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
16 0
|
3天前
|
Ubuntu Linux 编译器
在ubantu/linux系统出现parse error(语法错误)
本文讨论了在Ubuntu/Linux系统中遇到"parse error"(语法错误)的问题,并提供了将非声明语句移动到所有声明语句下方以解决该问题的解决方案。
在ubantu/linux系统出现parse error(语法错误)
WK
|
3天前
|
监控 Ubuntu Linux
Linux系统平均负载如何查看?
在Linux系统中,有多种命令可用于查看平均负载,包括实时和历史数据。常用方法有:`uptime`命令显示系统运行时间和平均负载;`top`命令实时监控系统进程和资源使用;`w`命令展示用户信息及负载;通过`cat /proc/loadavg`查看特定文件中的负载信息;`sar`命令提供详尽的系统资源监控;而`htop`则以交互方式展示系统负载和资源使用情况。这些工具帮助用户全面了解系统性能状态。
WK
10 2
|
3天前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
19 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3月前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
86 1
|
4月前
|
Linux 调度 数据库
Linux下的系统编程——线程同步(十三)
Linux下的系统编程——线程同步(十三)
63 0
Linux下的系统编程——线程同步(十三)
|
11月前
|
存储 Linux 调度
Linux系统编程 多线程基础
Linux系统编程 多线程基础
55 1
下一篇
云函数