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.hqwc.cn/news/478706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

activeMq将mqtt发布订阅转成消息队列

1、activemq.xml置文件新增如下内容 2、mqttx测试发送: 主题(配置的模糊匹配,为了并发):VirtualTopic/device/sendData/12312 3、mqtt接收的结果 4、程序处理 package comimport cn.hutool.core.date.DateUtil; imp…

Postgresql 怎么实现在局域网中访问

安装PostgreSQL后,默认情况下只能在本机进行连接访问,如果需要在其他主机上访问PostgreSQL数据库服务器,需要进行配置。 安装连接PostgresSQL数据库可以参考博文:安装连接PostgresSQL数据库教程 一. 整体步骤 主要包括下面几个步…

响应式建站系统源码:一站式建站平台 带完整的安装代码包以及搭建教程

在网络技术日新月异的今天,网站建设已经成为企业、个人展示自身形象、提供服务的重要窗口。然而,传统的网站建设方式往往需要投入大量的时间、金钱和人力成本,且对于非专业人士来说存在较高的技术门槛。为了解决这些问题,罗峰给大…

业务型 编辑器组件的封装(复制即可使用)

使用需要安装 wangeditor npm i --save wangeditor import React from react; import E from wangeditor; import ./index.lessclass EditorElem extends React.Component {constructor(props) {super(props);this.isChange false;this.state {}}componentDidMount() {con…

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

好书推荐丨《细说机器学习:从理论到实践》

文章目录 写在前面机器学习推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本有关机器学习的全新正版书籍&#xff0c;对机器学习、人工智能感兴趣的小伙伴们快来看看吧~ 机器学习 机器学习&#xff08;Machine Learning, ML&…

基于WOA优化的Bi-LSTM多输入分类预测(Matlab)鲸鱼算法优化双向长短期神经网络分类预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 鲸鱼优化算法&#xff08;WOA&#xff09;&#xff1a; 双向长短期神经网络&#xff08;Bi-LSTM&#xff09;&#xff1a…

配置Python环境及job运行的虚拟环境

1、配置Jenkins的Python环境&#xff1a;Manage Jnekins-Global Tool Configuration-Python 2、安装pyenv插件 此插件会给每个job都创建一个虚拟Python环境 安装后&#xff0c;在job config-build中选择 virtualenv builder build job的时候会自动在/opt/jenkins(node主机的…

亚马逊、沃尔玛、eBay等跨境平台自养号测评的风险和技术解析

亚马逊等平台延伸至世界各地&#xff0c;竞争激烈。许多卖家使用自养号测评来提高产品排名和销量。但自养号测评技术存在一定的技术局限性&#xff0c;很多卖家的账号因对自养号原理和底层环境搭建缺乏了解很多卖家的账号被关联封禁。本文将为您揭示自养号测评的风险&#xff0…

物流EDI:Verizon EDI 需求分析

作为物流行业的企业&#xff0c;Verizon与其供应商之间通过EDI来传输业务单据。在与Verizon建立EDI连接时&#xff0c;需要参考EDI 指南、采购订单条款和条件以及运输路线指南这三个文档。 点击此链接&#xff0c;获取上述的三个文档 Verizon供应商可以通过上述链接找到用于处…

小红书数据分析:sora爆火,为内容行业带来哪些变化

导语 春节还没过完&#xff0c;科技圈就出“大事”了~据悉&#xff0c;OpenAI发布了Sora&#xff0c;一种由文字生成视频的AI工具&#xff0c;且效果极其逼真&#xff0c;打破了多项纪录。Sora的出现&#xff0c;又让人类里通用人工智能AGI近了一步。那么。Sora的出现对于小红…

ESP32-Cam学习(2)——PC实时显示摄像头画面

具体代码和操作过程见&#xff1a; 3. 实时显示摄像头画面 (itprojects.cn)https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/e03.showvideo我主要记录一下我在复现的过程中&#xff0c;遇到的问题以及解决方法。 1.安装第三方库 首先电脑端的代码需要用pych…