嵌入式学习第十八天(目录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

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio