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.mzph.cn/news/691423.shtml

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

相关文章

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0,目前大规模使用的版本 HTTP/1.1; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同,HTTP 的报文格式&a…

【conda环境 安装 tensorflow2.2】 解决方案

1.检查anaconda安装:在cmd输入 conda --version 2.检测已经安装的环境:conda info --envs 3.新建一个python3.5的环境,tensorflow: ###conda create -n xxx python3.5 xxx为虚拟环境名 ###conda create -n xxx python3.6 xxx为虚拟…

openGauss 5.0.0全密态数据库应用小试

前言 openGauss HCIA教材中,安全是一个重要的章节,在实际项目中,随着网络安全和信息安全形势的变化,企业也越来越重视数据库安全。去年在HALP内部进行openGauss培训时,安全特性就被学员们提出来要重点讲解&#xff0c…

SICTF Round#3 Web方向 题解WP

100%_upload 题目描述:小茂夫说:一直上传恶意文件尊嘟要生气了,世事莫固守,转变思路求突破 开题,注意有个文件包含 题目把后缀过滤死了,无法上传php后缀文件。文件内容些许过滤,短…

在ubuntu20.04 上配置 qemu/kvm linux kernel调试环境

一:安装qemu/kvm 和 virsh qemu/kvm 是虚拟机软件,virsh是管理虚拟机的命令行工具,可以使用virsh创建,编辑,启动,停止,删除虚拟机。 (1):安装之前&#xff0c…

LLM应用开发与落地:chroma的近似搜索问题

背景 最近开始测试一个游戏客户的RAG模块,发现一个向量数据库中大家容易忽略的一个点:近邻搜索算法。一开始我们选择的是chroma作为向量数据库,因为chroma的用户接口和设计非常简单,而我偏向于简单。创建collection时设置的距离计…

EasySass: could not generate CSS file. See Output panel for details.微信小程序报错及解决

解决微信小程序导入vscode的easysass包报错 问题发现问题来源和解决制作不易,感谢三联,谢谢大家啦 问题发现 当我喜滋滋的在vscode中导入easysass包之后,又在微信小程序中添加vscode扩展,又去文件中改好了配置文件后却直接弹出了…

npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?

问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案 遇到…

生成对抗网络----GAN

系列文章目录 文章目录 系列文章目录前言一、基本构成二、应用领域三、基本原理四、如何训练GAN 前言 一、基本构成 GAN (Generative Adversarial Network) : 通过两个神经网络,即生成器(Generator)和判别器(Discriminator&#…

AtCoder Beginner Contest 341 D - Only one of two (Java)

AtCoder Beginner Contest 341 D - Only one of two (Java) 比赛链接:AtCoder Beginner Contest 341 D题传送门AtCoder:D - Only one of two D题传送门洛谷:[ABC341D] Only one of two 题目:[ABC341D】 Only one of two 题目…

安卓游戏开发之图形渲染技术优劣分析

一、引言 随着移动设备的普及和性能的提升,安卓游戏开发已经成为一个热门领域。在安卓游戏开发中,图形渲染技术是关键的一环。本文将对安卓游戏开发中常用的图形渲染技术进行分析,比较它们的优劣,并探讨它们在不同应用场景下的适用…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 使用PyChar…

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

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

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径 解法0 迭代法解法1 深度优先 前序解法2 深度优先 前序 添加了StringBulider ---------------🎈🎈257. 二叉树的所有路径 题目链接🎈🎈------------------- 解法0 迭代法…

08MARL深度强化学习 independent learning

文章目录 前言1、Independent Value-based Learning2、Independent Policy Gradient Methods 前言 记录independent learning算法的基础概念,使用一些RL算法训练多智能体 1、Independent Value-based Learning 基于值的独立学习算法:每个智能体根据自身…

51-2 万字长文,深度解读端到端自动驾驶的挑战和前沿

去年初,我曾打算撰写一篇关于端到端自动驾驶的文章,发现大模型在自动驾驶领域的尝试案例并不多。遂把议题扩散了一点,即从大模型开始,逐渐向自动驾驶垂直领域靠近,最后落地到端到端。这样需要阐述的内容就变成LLM基础模…

【Docker】集群容器监控和统计 Portainer基本用法

Portainer是一款轻量级的应用,它提供了图形化界面,用川于方便地管理Docker环境,包括单机环境和集群环境。 主要功能:实现集群容器的监控和统计 下载安装 官网:https://www.portainer.io 文档:https://do…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

Docker Desktop 链接windos 安装的redis和mysql

1.1.先在容器安装项目 2.链接redis和mysql配置 redis和mysql是在windos安装的,使用的是小p管理器安装的 项目链接 DB_DRIVERmysql DB_HOSThost.docker.internal DB_PORT3306 DB_DATABASEyunxc_test DB_USERNAMEyunxc_test DB_PASSWORDtest123456... DB_CHARSETutf…

一周学会Django5 Python Web开发-Django5路由变量

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计22条视频,包括:2024版 Django5 Python we…