嵌入式学习第十八天(目录IO)

2024-02-20 04:12

本文主要是介绍嵌入式学习第十八天(目录IO),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录IO:

1. mkdir

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

    功能:创建目录文件

    参数:

        pathname:文件路径

        mode:文件的权限

                rwx rwx rwx

                111 111 111

               0  7   7     7

                r:目录中是否能够查看文件

                w:目录中是否能够新建文件

                x:目录是否能够进入

    返回值:

        成功返回0

        失败返回-1

2. rmdir:

int rmdir(const char *pathname);

    功能:删除空目录文件

    返回值:

        成功返回0 

        失败返回-1

3. opendir

DIR *opendir(const char *name);

    功能:打开目录获得目录流指针

    参数:

        name:目录文件路径

    返回值:

        成功返回目录流指针

        失败返回NULL

4. closedir

int closedir(DIR *dirp);

    功能:关闭目录流指针

5. readdir

struct dirent *readdir(DIR *dirp);

    功能:从目录流中读取下一个目录项的结构体信息

    参数:

        dirp:目录流指针

    返回值:

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

struct dirent {ino_t          d_ino;       /* Inode number */off_t          d_off;       /* Not an offset; see below */unsigned short d_reclen;    /* Length of this record */unsigned char  d_type;      /* Type of file; not supportedby all filesystem types */char           d_name[256]; /* Null-terminated filename */};

6. chdir

int chdir(const char *path);

    功能:切换当前代码的工作路径

7. getcwd

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

    功能:获得当前目录的绝对路径

8. access

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

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

    参数:

        pathname:文件路径

        mode:

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

    返回值:

        有该权限返回0
        出错返回-1

作业:

        1. 执行两次代码,打印出两次执行过程中新增的文件及删除的文件

#include "head.h"int ListFile(const char *pdirname, const char *pfilename)
{FILE *fp = NULL;DIR *dp = NULL;struct dirent *pp = NULL;char tmpbuff[4096] = {0};fp = fopen(pfilename, "a");if(fp == NULL){perror("fail to fopen");return -1;}dp = opendir(pdirname);if(dp == NULL){perror("fail to opendir");return -1;}while(1){pp = readdir(dp);if(pp == NULL){break;}if(*pp->d_name == '.'){continue;}sprintf(tmpbuff, "%s/%s", pdirname, pp->d_name);fprintf(fp, "%s\n", tmpbuff);if(pp->d_type == DT_DIR){ListFile(tmpbuff, pfilename);}}fclose(fp);closedir(dp);return 0;
}int ListDir(const char *pdirname, const char *pfilename)
{FILE *fsrc = NULL;FILE *fdst = NULL;DIR *dp = NULL;struct dirent *pp = NULL;char tmpbuff[4096] = {0};char tmpsrc[4096] = {0};char tmpdst[4096] = {0};char *psrc = NULL;char *pdst = NULL;fsrc = fopen(pfilename, "r");if(fsrc == NULL){perror("fail to fopen");return -1;}fdst = fopen("b.txt", "w+");if(fdst == NULL){perror("fail to fopen");return -1;}dp = opendir(pdirname);if(dp == NULL){perror("fail to opendir");return -1;}ListFile(pdirname, "b.txt");fseek(fsrc, 0, SEEK_SET);fseek(fdst, 0, SEEK_SET);while(1){pdst = fgets(tmpdst, sizeof(tmpdst), fdst);if(pdst == NULL){break;}int found1 = 0;fseek(fsrc, 0, SEEK_SET);while(1){psrc = fgets(tmpsrc, sizeof(tmpsrc), fsrc);if(psrc == NULL){break;}if(strcmp(tmpsrc, tmpdst) == 0){found1 = 1;break;}}if(!found1){printf("add:%s\n", tmpdst);			}}fseek(fsrc, 0, SEEK_SET);fseek(fdst, 0, SEEK_SET);while(1){psrc = fgets(tmpsrc, sizeof(tmpsrc), fsrc);if(psrc == NULL){break;}int found2 = 0;fseek(fdst, 0, SEEK_SET);while(1){pdst = fgets(tmpdst, sizeof(tmpdst), fdst);if(pdst == NULL){break;}if(strcmp(tmpdst, tmpsrc) == 0){found2 = 1;break;}}if(!found2){printf("mul:%s\n", tmpsrc);}}fclose(fsrc);fclose(fdst);closedir(dp);return 0;
}int main(int argc, const char *argv[])
{int flat = 0;if(argc != 3){fprintf(stderr, "Usage:./a.out dirname filename\n");return -1;}flat = access(argv[2], F_OK);if(flat == 0){ListDir(argv[1], argv[2]);}else{ListFile(argv[1], argv[2]);}return 0;
}

这篇关于嵌入式学习第十八天(目录IO)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727004

相关文章

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学