【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十二章 目录IO

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第三十二章 目录IO

32.1 目录IO mkdir()

本章内容对应视频讲解链接(在线观看):

目录I0之mkdir函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=10

文件IO和目录IO的对比:

区别:

之前我们学习的文件IO和提到过的标准IO都是对文件操作,接下来学习的目录IO都是对目录操作。创建目录函数如下表所示:

函数

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

头文件

#include <sys/stat.h>

#include <sys/types.h>

参数pathname

路径和文件名

参数mode

权限掩码,对不同用户和组设置可执行,读,写权限,使用八进制数表示,此参数可不写。

返回值

mkdir()执行成功会返回0,出错时返回-1。

功能

创建一个目录

实验代码

在程序中,创建文件夹,代码如下所示:代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\08”目录下。

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>int main(int argc, char *argv[])
{int ret;if (argc != 2){printf("Usage:%s <name file>\n", argv[0]);return -1;}ret=mkdir(argv[1],0666);if(ret<0){printf("mkdir is error\n");}printf("mkdir is ok\n");return 0;
}

编译运行

在Ubuntu上编译文件,并运行程序,成功创建文件夹test,如下图所示:

32.2 目录IO opendir()/closedir()

本章内容对应视频讲解链接(在线观看):

目录IO之opendirflclosedi函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=11

opendir和closedir函数详解如下所示:

函数

DIR *opendir(const char *name);

头文件

#include <sys/types.h>

#include <dirent.h>

参数name

路径名字

返回值

成功返回打开的目录流,失败返回 NULL。

功能

打开指定的目录,并返回DIR*形态的目录流

函数

int closedir(DIR *dirp)

头文件

#include <sys/types.h>

#include <dirent.h>

参数dirp

要关闭的目录流指针

功能

关闭目录流。

 

实验代码

在程序中,打开指定目录。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\09”目录下。

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc, char *argv[])
{int ret;DIR *dp;if (argc != 2){printf("Usage:%s <name file>\n", argv[0]);return -1;}dp = opendir(argv[1]);if (dp != NULL){printf("opendir is ok\n");return -1;}closedir(dp);return 0;
}

编译执行,即可看到目录下的文件,新建文件夹test,并运行命令打开test文件夹。

32.3 目录IO readdir()

本章内容对应视频讲解链接(在线观看):

目录I0之readdir函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=12

读一个目录使用函数 readdir(),详解如下表所示:

函数

struct dirent *readdir(DIR *dirp);

int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

头文件

#include <dirent.h>

参数DIR *dirp

要读取的目录流指针

返回值

成功返回读取到的目录流指针,失败返回 NULL

功能

    用来读一个目录

实验代码

在程序中,读取目录。代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\10”目录下。


#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc, char *argv[])
{int ret;DIR *dp;struct dirent *dir;if (argc != 2){printf("Usage:%s <name file>\n", argv[0]);return -1;}dp = opendir(argv[1]);if (dp == NULL){printf("opendir is error\n");return -2;}printf("opendir is ok\n");while (1){dir = readdir(dp);if (dir != NULL){printf("file name is %s\n", dir->d_name);}elsebreak;}closedir(dp);return 0;
}

运行测试

编译程序,如下图所示:

运行程序如下图所示,读取到了test目录下的子目录。

32.4 综合练习(二)

本章内容对应视频讲解链接(在线观看):

综合练习(二)  https://www.bilibili.com/video/BV1zV411e7Cy?p=13

实验要求

在综合练习1的基础上,利用我们本阶段学习的知识,修改综合练习1的代码,增加以下需求:

1.打印我们要拷贝的目录下的所有文件名,并拷贝我们需要的文件。

2.通过键盘输入我们要拷贝的文件的路径和文件名等信息

实验代码

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\11”目录下。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
int main(int argc, char *argv[])
{//步骤一:定义变量int fd_src;int fd_obj;char buf[32] = {0};char file_path[32] = {0};char file_name[32] = {0};ssize_t ret;struct dirent *dir;DIR *dp;// 步骤二:从键盘输入文件路径printf("Please enter the file path:\n");scanf("%s", file_path);// 步骤三:打开目录,获得目录流指针,并读取目录dp = opendir(file_path);if (dp == NULL){printf("opendir is error\n");return -1;}printf("opendir is ok\n");while (1){dir = readdir(dp);if (dir != NULL){printf("file name is %s\n", dir->d_name);}elsebreak;}// 步骤四:获得文件的名字printf("Please enter the file name:\n");scanf("%s", file_name);// 步骤五:获得文件描述符fd_src = open(strcat(strcat(file_path, "/"), file_name), O_RDWR);if (fd_src < 0){printf("open is error\n");return -1;}fd_obj = open(file_name, O_CREAT | O_RDWR, 0666);if (fd_obj < 0){printf("open is error\n");return -2;}// 步骤六:读写操作while ((ret = read(fd_src, buf, 32)) != 0){write(fd_obj, buf, ret);}// 步骤七:关闭目录,文件close(fd_src);close(fd_obj);closedir(dp);return 0;
}

在Ubuntu上首先新建test文件夹,文件夹里面新建三个文件;a.c,b.c,c.c,如下图所示

编译运行如下图所示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3247068.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Window 安装Open Cascade

目录 一、下载软件 二、环境配置 一、下载软件 下载网址&#xff1a;Download - Open CASCADE Technology 新手推荐exe方式进行安装&#xff0c;直接就可以使用&#xff0c;这里使用 vc140 &#xff0c;配合vs2015来使用。 假设安装在D盘&#xff0c;安装完成如下&#xff…

栈和队列深入浅出

目录&#xff1a; 一. 栈的概念及使用 二.栈的相关经典OJ 三. 队列的概念及使用 二. 队列的相关经典OJ 一. 栈的概念及使用&#xff1a; 1. 概念&#xff1a; 栈一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈…

【前端】ikun-qrcode:极简的二维码生成组件,使用view而非canvas避免层级问题

文章目录 背景ikun-qrcode界面效果如何发布一款自己的插件到uniapp市场。&#xff08;5分钟搞定&#xff09; 背景 之前在uniapp上100行搞定二维码生成&#xff0c; 现在封装为vue组件分享出来&#xff1a; 下载地址&#xff1a; https://ext.dcloud.net.cn/plugin?id19351 …

【C++初阶】C/C++内存管理

【C初阶】C/C内存管理 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. C/C内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3…

【Python】AI赋能自动化测试—Applitools Eyes让视觉检查自动化测试更智能、更高效(限时公开)

文章目录 一.视觉回归测试1.什么是视觉回归测试&#xff1f;2.视觉回归测试的必要性3.视觉回归测试是如何工作的&#xff1f;4.常用的视觉回归测试工具有哪些&#xff1f; 二.Applitools Eyes1.是什么2.优缺点3.注册平台账号功能介绍1.界面切换2.单条视觉测试结果解读3.测试视图…

网络开局 与 Underlay网络自动化

由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…

发文大刊!Springer旗下1区SCI,收稿量20000+,投稿难度一颗星!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是1本2区计算机综合类SCI&#xff0c;该期刊隶属于Springer出版社&#xff0c;分区逐年上升&#xff0c;现已稳定检索13年&#xff0c;属于Springer旗下的1本口碑优刊。 1 期刊基本信息 【期刊简介】IF&#xff1a;3.0-4.…

【zabbix6监控java-tomcat全流程】

目录 一、监控主机安装zabbix-server1、zabbix的安装2、配置数据库3、为zabbix server配置数据库4、启动服务,web界面安装 二、被监控主机安装tomcat1、安装JDK2、安装tomcat 三、zabbix的服务端安装zabbix-java-gateway四、被监控主机tomcat的配置五、web界面添加主机 一、监控…

python 10的阶乘怎么算

python计算阶乘的方法有很多种&#xff0c;下面给大家介绍三种方法。 第一种&#xff1a;利用functools工具处理 import functools result (lambda k: functools.reduce(int.__mul__, range(1, k 1), 1))(10) print(result) 结果如下&#xff1a; 3628800 第二种&#xff1a…

Tongweb7 日志报错:HttpServletResponse is exceeding the 65535 bytes limit(by lqw)

遇到jsp访问的时候页面加载不全&#xff0c;看tw7日志有如下图信息&#xff1a; 原因&#xff1a; jsp的本质是servlet&#xff0c;编译时会先将他转换成java代码&#xff0c;然后再进行编译。 你的jsp编译成生成的文件太大&#xff0c;导致报错。&#xff08;Java 编译器限制…

【操作系统】定时器(Timer)的实现

这里写目录标题 定时器一、定时器是什么二、标准库中的定时器三、实现定时器 定时器 一、定时器是什么 定时器也是软件开发中的⼀个重要组件.类似于⼀个"闹钟".达到⼀个设定的时间之后,就执行某个指定 好的代码. 定时器是⼀种实际开发中⾮常常用的组件. ⽐如⽹络通…

安全防御---防火墙综合实验3

安全防御—防火墙综合实验3 一、实验拓扑图 二、实验要求 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW3&#xff0c;生产区和办公区的流量走FW1 13&#xff0c;办公区…

Jenkins安装nodeJs环境

首先插件市场安装nodeJS插件&#xff0c;我这里已经安装了&#xff0c;没安装的话在 Available plugins 中搜索安装 安装完成后需要下载需要的nodejs版本 新增完成就可以在构建的时候选择当前版本号了

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了&#xff0c;需要用新的参数。如果有多个交易&#xff0c;读不同的参数文件&#xff0c;但是数据还是一套&#xff0c;就要改多个参数文件。或者只想执行参数文件的某一行数据&#xff0c;又不想调整参数文件顺序。 第一个问题目前想到…

无人驾驶的未来:AI如何重塑我们的出行世界

无人驾驶汽车&#xff0c;作为人工智能&#xff08;AI&#xff09;技术的集大成者&#xff0c;正以前所未有的速度改变着我们的出行方式。从机器学习到计算机视觉&#xff0c;再到人工智能生成内容&#xff08;AIGC&#xff09;&#xff0c;AI技术的每一次进步都在为无人驾驶汽…

C语言 do while循环语句练习 下

猜数字游戏实现 //猜数字游戏 //电脑产生 一个随机数&#xff08;1-100) //猜数字 //猜大了 //猜小了 //直到猜对了&#xff0c;结束 #include <stdlib.h> #include <time.h> void menu() {printf("********************************\n");printf("…

浅谈电商搜索数据指标体系建设

搜索作为电商APP中用户下单的核心场域&#xff0c;具有较高的消费者价值&#xff08;体验&#xff09;、变现价值&#xff08;赚钱&#xff09;、数据沉淀价值&#xff08;研究&#xff09;。因此搭建搜索相关数据指标体系&#xff0c;用于及时监控波动&定位原因就显得至关…

SCI二区TOP|旗鱼优化算法(SFO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;S Shadravan受到母亲与孩子之间的人际互动启发&#xff0c;提出了旗鱼优化算法&#xff08;SailFish Optimizer, SFO&#xff09;。 2.算法原理 2.1算法思想 SFO灵感…

Java之split 方法

方法的工作原理 split 方法首先检查字符串中是否存在指定的分隔符。如果存在&#xff0c;它会在每个分隔符处切割字符串&#xff0c;生成一个新的字符串数组。如果字符串中没有指定的分隔符&#xff0c;或者分隔符是非空字符但在字符串中不存在&#xff0c;则 split 方法会返回…

前端简历:项目经历(经验)-外卖送餐类

项目经历-堂食外送点餐 2022年2月-2022年5月 项目描述&#xff1a;该平台提供外送订餐服务&#xff0c;用户可以在手机中轻松地浏览菜品、下单、支付、编辑地址、填写个人信息等&#xff0c;我主要负责首页、订单、我的这3个功能/模块。 技术栈&#xff1a;Amfe-flexibleAxi…