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

相关文章

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

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

更改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