Linux-目录I/O-004

学习重点:

1.目录I/O的函数接口
2.目录的遍历,目录的递归遍历

1.【mkdir】

1.1函数原型

【int mkdir(const char *pathname, mode_t mode);】

1.2函数功能

创建目录文件

1.3函数参数

1.3.1【pathname】

文件路径

1.3.2【mode】

文件的权限

1.4返回值

【成功】:返回0 
【失败】:返回-1

1.5源码示例

在这里插入图片描述
(1)多次执行效果为覆盖

2.【rmdir】

2.1函数原型

  【int rmdir(const char *pathname);】

2.2函数功能

    删除空目录文件

2.3函数参数

2.4返回值

    【成功】:返回0 
    【失败】:返回-1 

3.【opendir】

3.1函数原型

  【DIR *opendir(const char *name);】

3.2函数功能

    打开目录获得目录流指针

3.3函数参数

3.3.1【name】

    目录文件路径

3.4返回值

    【成功】:返回目录流指针
    【失败】:返回NULL
    目录流数据结构:
typedef struct{
int fd;    /*目录文件的文件描述符*/
struct dirent *dirent;    /*当前读取的目录项*/
}DIR;
说明:
【fd】:是目录文件的文件描述符。
【dirent】:字段是一个指向当前读取的目录项的指针。
	目录流的底层实现是通过文件描述符和目录缓存来实现的。当用户调用【opendir】函数打开一个目录时,系统会创建一个文件描述符,然后将目录文件映射到该文件描述符上,并创建一个目录缓存,用于存储读取的目录项。每次调用【readdir】函数,系统会从目录缓存中读取一个目录项,并将【dirent】 指针指向该目录项。当读取完所有的目录项后,系统会关闭文件描述符,并释放目录缓存。
	用户不能直接访问其内部结构,而是通过 【opendir】函数打开目录,并通过【readdir】函数读取目录项。在使用完【DIR】数据结构后,用户应该调用【closedir】函数关闭目录,以释放资源。

4.【closedir】

4.1函数原型

  【int closedir(DIR *dirp);】

4.2函数功能

    关闭目录流指针

4.3函数参数

4.4返回值

5.【readdir】

5.1函数原型

  【struct dirent *readdir(DIR *dirp);】

5.2函数功能

    从目录流中读取下一个目录项的结构体信息
    **说明:**
    (1)目录流:目录流是一个抽象的概念,指的是与目录相关联的文件描述符和目录缓存,它可以用于读取目录中的目录项。
    (2)目录项:文件系统的目录项(directory entry)是一个数据结构(见5.4返回值),用于建立文件名和文件的【inode】号之间的映射关系。每个目录都是一个文件,它包含了多个目录项,每个目录项包含了一个文件名和一个 inode 号,以及一些其他的元数据信息,如文件类型、权限、所有者、所属组、大小、创建时间、修改时间等。
    当用户访问某个文件时,系统会根据文件名查找对应的目录项,获取该文件的【inode】号,然后根据【inode】号读取文件的内容。
   (3)目录遍历问题:【readdir】注意一点就是成功时返回目录流【dirp】中下一个目录项,是自动跳到下一个,这样结合【while】就可以遍历整个目录了。

5.3函数参数

5.3.1【dirp】

    目录流指针

5.4返回值

5.4.1返回值类型

【成功】:返回包含目录项信息的空间首地址
【失败】:返回NULL
【读到文件末尾】:返回NULL

5.4.2返回值相关说明

5.4.2.1目录项的结构体
原见【man】手册:
【struct dirent {
ino_t   d_ino;       /* Inode number( 目录的inode) */
off_t    d_off;       /* Not an offset; see below (目录文件开头至此目录进入点的偏移)*/
unsigned short    d_reclen;    /* Length of this record(d_name的长度,不包含NULL字符) */
unsigned char    d_type;      /* Type of file; not supported by all filesystem types(d_type指向的文件类型) */
char    d_name[256]; /* Null-terminated filename (目录名)*/
};】
5.4.2.2【d_ino】
5.4.2.3【d_off】
5.4.2.4【d_reclen】
5.4.2.5【d_type】
Linux文件类型:
【DT_REG】:普通文件
【DT_DIR】:目录文件
【DT_FIFO】:命名管道
【DT_SOCK】:套接字文件
【DT_CHR】:字符设备文件
【DT_BLK】:块设备文件
【DT_LNK】:符号链接文件
5.4.2.6【d_name】

5.5源码示例

在这里插入图片描述
注意:【pp->d_name】只包含文件名,不包括路径。如果要获取文件的完整路径,可以将文件名和路径拼接起来。另外,当读取完所有的目录项后,【readdir】函数会返回【NULL】,表示目录读取结束。

6【chdir】

6.1函数原型

【int chdir(const char *path);】

6.2函数功能

改变调用进程中当前工作目录为指定路径的目录。
**注意:**
(1)调用进程需要有搜索整个目录的权限。
(2)每个进程都具有一个当前工作目录。在解析相对目录引用时,该目录是搜索路径的起始目录。
(3)如果调用进程更改了目录,则它只对该进程有效,而不能影响调用它的那个进程。
(4)程序结束,返回最初的那个工作目录。

6.3函数参数

6.3.1【path】

指定的路径

6.4返回值

【成功】:返回0
【失败】:返回-1

7.【getcwd】

7.1函数原型

【char *getcwd(char *buf, size_t size);】

7.2函数功能

获取当前工作目录的绝对路径:获取当前进程的工作目录的绝对路径放在大小为size的buf中

7.3函数参数

7.3.1【buf】

存放当前工作目录的缓冲区

7.3.2【size】

缓冲区大小

7.4返回值

【成功】:buf中保存当前进程工作目录
【失败】:NULL

7.5源码示例

在这里插入图片描述

8【access】

8.1函数原型

【int access(const char *pathname, int mode);】

8.2函数功能

检测调用函数的程序对文件是否拥有指定权限

8.3函数参数

8.3.1【pathname】

文件路径

8.3.2【mode】

【R_OK】:检测是否拥有读权限
【W_OK】:检测是否拥有写权限
【X_OK】:检测是否拥有执行权限
【F_OK】:检测文件是否存在

8.4返回值

【有该权限】:返回0
【出错】:返回-1 

8.5源码示例

在这里插入图片描述

9目录的遍历

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/397506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软件使用】postman使用教程

​ 🍎个人博客:个人主页 🏆个人专栏:软件安装及使用 ⛳️ 功不唐捐,玉汝于成 ​ 目录 前言 正文 步骤1:安装Postman 步骤2:发送请求 步骤3:管理环境变量 步骤4&#xff1…

全链路压测演进之迭代式压测

1.背景原因 !! 做系统服务压测都是比较耗时耗人力的,特别是在生产环境上做压测,压测的时间都是在晚上23点后,甚至在凌晨1-4点,每次投入的人力成本较高(经常是晚上通宵加班压测,疲惫感十足)&…

Mybatis常见问题

引言 MyBatis工作原理如下图所示: 1、读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。 2、加载映射文件:映射文件即SQL映射文件,该…

Redis部署方式(一)四种部署方式介绍

redis的四种部署方式: Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署,后面三种(主从模式,Sentinel哨兵模式,Cluster模式)也可以统称为集群模式。 一、单机 1、缺点&…

SG-8018CG晶体振荡器可编程

SG-8018CG 晶体振荡器是一款集宽频率范围、高稳定性、低功耗及超小型封装于一身的高性能时钟源解决方案。是需要在高温环境中运作的复杂电子系统的理想选择。通过SG-Writer II工具的支持,SG-8018CG系列提供了快速、灵活的编程选项,使得它能够迅速适应市场…

MySQL多实例部署:从概念到实操的全面指南

目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…

【大模型 向量库】从向量搜索到向量数据库

大模型向量库 向量:AI核心向量库:语义近似搜索大模型 向量库YOLO 向量数据库嵌入(Embedding)设计最近邻搜索近似近邻搜索 主流向量数据库Milvus 实践 向量:AI核心 向量伴随着 AI 模型的发展而发展。 向量&#xff…

【vue3】手动实现md在线编辑

1.背景 由于知识库的一些.md格式的文件的文件内容可能会有变动,如果频繁下载修改后,再进行上传,会让用户操作不方便,为此接入md在线编辑功能 2 md在线编辑具体实现 2.1 搭建项目 搭建项目下载和引入bytemd和fflate相关依赖&…

Microsoft Office Visio 2007中绘制大括号

文章目录 一、Microsoft Office Visio 2007中绘制大括号 一、Microsoft Office Visio 2007中绘制大括号 在Microsoft Office Visio 2007中绘制大括号的方法如下: 打开Visio 2007——文件——形状——其他Visio方案——标注 此时左侧栏中出现“标注”栏&#xff0c…

通过VSCode开发Python项目

一、插件准备 Python 插件,必须 autoDocstring 生成注释,和Pycharm一样输入三个引号"""会生产注释结构 Todo Tree 高亮显示 TODO/FIXME 二、python相关设置 一)设置python环境 按"F1"打开命令面板(…

YOLOv8改进 | 进阶实战篇 | 利用辅助超推理算法SAHI推理让小目标无所谓遁形(支持视频和图片)

欢迎大家订阅我的专栏一起学习YOLO! 一、本文介绍 本文给大家带来的是进阶实战篇,利用辅助超推理算法SAHI进行推理,同时官方提供的版本中支持视频,我将其进行改造后不仅支持视频同时支持图片的推理方式,SAHI主要的推理场景是针对于小目标检测(检测物体较大的不适用,…

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一:Volume 命令操作方式二:-v 或者--mount 指定方式三:Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…

js-Vue Router 中的方法,父A-子B-子C依次返回,无法返回到A,BC中形成循环跳转解决

1.常用的方法 在 Vue Router 中,有一些常用的方法用于实现路由导航和管理。以下是一些常见的 Vue Router 方法及其作用: push: router.push(location, onComplete, onAbort) 作用:向路由历史记录中添加一个新条目,并导航到指定的路…

电脑文件误删除如何恢复?2024最新三种恢复方法

我们在使用电脑的过程中,随着时间的不断推移,渐渐的我们会发现C盘内存空间不足了。这是因为我们很多文件都默认存储在C盘,所以导致C盘空间不足,电脑运行越来越慢。那么电脑哪些文件可以删除,电脑删除的东西怎么恢复&am…

Istio复习总结:xDS协议、Istio Pilot源码、Istio落地问题总结

1、xDS协议 1)、xDS是什么 xDS是一类发现服务的总称,包含LDS、RDS、CDS、EDS以及SDS。Envoy通过xDS API可以动态获取Listener(监听器)、Route(路由)、Cluster(集群)、Endpoint&…

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息!我想通过openai公司的chatgpt3.5来了解一下关于sora的技术信息,结果呢,它竟然回答不知道sora是什么。看来,sora的语料库信息还未来得及加入chatgpt3.5的训练模型中。 如图…

Linux——网络通信TCP通信常用的接口和tcp服务demo

文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符,他的作用就是打开一个网络通讯端口,返回的这个描述符其实就可以理解为一个文件描述符&a…

外包干了3个多月,技术退步明显。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

ElasticSearch高级功能

目录 ES数据预处理 Ingest Node Ingest Node VS Logstash Ingest Pipeline Painless Script ES文档建模 Elasticsearch中处理关联关系 对象类型 嵌套对象(Nested Object) 父子关联关系(Parent / Child ) ES数据预处理 Ingest Node Elasticsearch 5.0后,…

从可靠性的角度理解 tcp

可靠性是 tcp 最大的特点。常见的用户层协议,比如 http, ftp, ssh, telnet 均是使用的 tcp 协议。可靠性,即从用户的角度来看是可靠的,只要用户调用系统调用返回成功之后,tcp 协议栈保证将报文发送到对端。引起不可靠的表现主要有…