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

相关文章

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

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t