嵌入式学习——Shell()——day21
(1)标准IO——有缓存
1.打开文件 fopen
2.读写文件
fgetc/fputc
fgets/fputs
fprintf/fscanf
3.关闭文件 fclose
1. 缓存(标准IO有缓存,文件IO没有缓存)——从流中读写数据时标准IO没有缓存
1.1 全缓存 4096字节(4k)
刷新条件:
1.缓存区满刷新
2.fflush刷新
3.fclose刷新
1.2 行缓存 1024字节(1k)stdin、stdout
刷新条件:
1.缓存区满刷新
2.fflush刷新
3.fclose刷新
4.遇到\n刷新
1.3 不缓存 0k stderr
立即刷新不缓存
(2) 二进制文件读写
fwrite/fread
(3) 流的定位函数接口
1. fseek
1.1 定义
int fseek(FILE *stream, long offset, int whence);
1.2 功能
定位流的偏移量
1.3 参数
stream:文件流指针
offset:偏移量
> 0 向后偏移
< 0 向前偏移
whence: 偏移的基准
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
1.4 返回值
成功返回0
失败返回-1
1.5 示例代码
#include <stdio.h>int main(void)
{char buf[512]={0};FILE* fp = fopen("1.c", "r");if(NULL == fp){printf("fopen error!\n");return -1;}fseek(fp, 9, SEEK_SET);fgets(buf, sizeof(buf), fp);printf("%s", buf);fclose(fp);return 0;
}
2. rewind
2.1 定义
void rewind(FILE *stream);
2.2 功能
将文件流指针偏移量定义为开头——等价于 fseek(stream, 0, SEEK_SET);
2.3 参数
stream:文件流指针
2.4 示例代码
#include <stdio.h>int main(void)
{char buf[512]={0};FILE* fp = fopen("1.c", "r");if(NULL == fp){printf("fopen error!\n");return -1;}fseek(fp, 9, SEEK_SET);rewind(fp);fclose(fp);return 0;
}
3. ftell
3.1 定义
long ftell(FILE *stream);
3.2 功能
获得流的偏移量
3.3 参数
stream:文件流指针
3.4 示例代码
#include <stdio.h>int main(void)
{char buf[512]={0};long num = 0;FILE* fp = fopen("1.c", "r");if(NULL == fp){printf("fopen error!\n");return -1;}fseek(fp, 0, SEEK_END);num = ftell(fp);rewind(fp);printf("num = %ld\n", num);fclose(fp);return 0;
}
(4) 文件IO步骤
1. open/close
2. read/write
3. lseek
(5)文件IO函数接口
1 open
1. 定义
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
2. 功能
打开文件并获得操作文件的文件描述符
3. 参数
pathname:要打开的文件路径对应字符串的首地址
flags:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 文件不存在创建(需要open传入第三个参数)
O_TRUNC 文件存在截断成0(清0)
O_APPEND 追加打开
O_ASYNC 异步IO
O_NONBLOCK 非阻塞IO
O_EXCL 检测文件是否存在
4. 返回值
成功返回新文件描述符
失败返回-1
5. 示例程序
注意使用open时要加头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(void)
{int fd = 0;fd = open("1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == fd){printf("open failed!\n");return -1;}return 0;
}
2 close
1. 定义
int close(int fd);
2. 功能
关闭文件描述符
3. 参数
fd 文件描述符
4. 返回值
成功返回0
失败返回-1
5. 示例程序
注意使用close时要加头文件
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(void)
{int fd = 0;fd = open("1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == fd){printf("open failed!\n");return -1;}close(fd);return 0;
}
3 write
1. 定义
ssize_t write(int fd, const void *buf, size_t count);
2. 功能
向文件描述符对应文件中写入buf开始的count个字节数据
3. 参数
fd:文件描述符
buf:存放数据空间的首地址
count:写入字节的个数
4. 返回值
成功返回实际写入的字节数
失败返回-1
5. 示例程序
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>int main(void)
{int fd = 0;ssize_t size = 0;char buf[32] = "supercarrydoinb";fd = open("2.c", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == fd){printf("open error!\n");return -1;}size = write(fd, buf, strlen(buf));printf("size = %ld\n", size);close(fd);return 0;
}
4 read
1. 定义
ssize_t read(int fd, void *buf, size_t count);
2. 功能
从文件描述符中读取count个字节,放入buf指向的空间中
3. 参数
fd:文件描述符
buf:存放数据空间首地址
count:最多读取数据字节数
4. 返回值
成功返回实际读到字节数
失败返回-1
读到文件末尾返回0
5. 示例程序
1.简单程序
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(void)
{int fd = 0;ssize_t num = 0;char buf[1024] = {0};fd = open("2.c", O_RDONLY);if (-1 == fd){printf("open error!\n");return -1;}num = read(fd, buf, sizeof(buf));printf("buf = %s\n", buf);printf("num = %ld\n", num);close(fd);return 0;
}
2. 使用write和read完成图片的复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(void)
{int src = 0;int dst = 0;src = open("1.png", O_RDONLY);dst = open("3.png", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == src || -1 == dst){printf("open error!\n");return -1;}while (1){char buf[1024] = {0};ssize_t size = 0;size = read(src, buf, sizeof(buf));if (0 == size){break;}write(dst, buf, sizeof(buf));}close(src);close(dst);return 0;
}
(6) 文件IO偏移量定位函数接口
lseek
1. 定义
off_t lseek(int fd, off_t offset, int whence);
2. 功能
重定位文件描述符的偏移量
3. 参数
fd:文件描述符
offset:偏移量
>0 向后偏移
<0 向前偏移
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
4. 返回值
成功返回偏移量
失败返回-1
5. 示例程序
相关文章:
嵌入式学习——Shell()——day21
(1)标准IO——有缓存 1.打开文件 fopen 2.读写文件 fgetc/fputc fgets/fputs fprintf/fscanf 3.关闭文件 fclose 1. 缓存(标准I…...
STM32学习计划
前言: 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程,会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程,然后是学习完正点原子的I.M…...
小米15曝光?可能会要稍微涨价
也许是感受到了智能机市场的逐渐复苏,最近各大手机品牌发售新品的速度明显加快了。从4月份的Redmi、一加,再到5月份一大堆vivo、OPPO新机型的发布。而近日,有关小米14即将发售的消息也是悄咪咪的放了出来。 去年发售的小米14可以说是狠狠地让…...
深度优先搜索汇总
常用英文 最近公共祖先(Lowest Common Ancestor,简称LCA) posterity,英语单词,主要用作名词,作名词时译为“子孙,后裔;后代”。 什么是深度优先搜索 深度优先搜索,D…...
【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…...
Python学习之路 | Python基础语法(一)
数据类型 Python3 中常见的数据类型有: Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dict…...
【已解决】AttributeError: module ‘clip‘ has no attribute ‘load‘
问题描述:运行YOLO-world时出现AttributeError: module clip has no attribute load。 情况分析: 1. 未安装clip包。 2. clip包中没有load方法。 解决办法: 1.重新安装clip包。 pip install clip pip install openai-clip 2. 安装后仍然报…...
安卓实现连接wesokcet
在build.gradle里引入依赖: implementation org.java-websocket:Java-WebSocket:1.5.2 在Androidmanifest.xml 文件里加入网络权限: <uses-permission android:name"android.permission.INTERNET" /> 代码: package com.x…...
Xinstall助力App下载量精准统计,洞悉推广效果
在移动互联网时代,App的下载量是衡量一个应用受欢迎程度的重要指标。然而,要精准统计App的下载量并不是一件容易的事情。为了解决这一难题,越来越多的开发者选择了Xinstall这一专业的App全渠道统计服务商。 Xinstall作为国内领先的App统计平…...
CSS字体修饰
1)文字大小 ( font-size ) /* 设置文字大小为24个像素 */ font-size: 24px; 2)字体粗细 ( font-weight ) /* 字体粗细在100-900之间可以进行调整 */ /* 字体加粗 */ font-weight: bolder; /* 或 fon…...
高并发缓存服务的构建要点与陷阱
1. 缓存基础与特征 在讨论高并发环境下构建缓存服务的问题前,我们需要先了解缓存的基础和特征。缓存(Cache)是一种高速数据存储层,它可以存储临时数据,以便将来的请求能更快地获取到这些数据。从本质上讲,…...
Electron学习笔记(五)
文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 (窗口需处于激活状态)(2)、监听全局按键事件 (窗口无需处于激活状态)(3)、补充:自定义窗口菜单快捷…...
【jest 调试 - vscode debug】
jest 测试typescript,如果想对测试文件本身断点调试。 安装jest相关依赖 # jest本体 npm install --save-dev jest # jest的类型声明 npm install --save-dev types/jest # typescript中使用 npm install --save-dev ts-jestlaunch.json 配置参考 {"type&qu…...
华为OD机试【分奖金】(java)(100分)
1、题目描述 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么&…...
27- ESP32-S3 USB虚拟串口(USB-OTG 外设介绍)
ESP32-S3 USB虚拟串口详解 USB-OTG 外设介绍 USB-OTG: USB-OTG是一种USB规范,允许嵌入式系统(如手机、平板电脑、单片机系统等)在没有主机(如个人电脑)的情况下直接相互通信,同时也能够作为传…...
PostgreSQL查看sql的执行计划
PostgreSQL查看sql的执行计划 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777在PostgreSQL中,查看…...
macOS Ventura 13如何设置定时重启(命令行)
文章目录 macOS Ventura 13如何设置定时重启(命令行)前言具体设置步骤及命令解释其他 macOS Ventura 13如何设置定时重启(命令行) 前言 由于升级 macOS 13 Ventura 之后,之前在节能里面通过鼠标点击设置开机关机的方法不能用了,现在只能用命令设置开机…...
【sass简介以及如何安装使用】
Sass(Syntactically Awesome Stylesheets)是一个层叠样式表(CSS)预处理器,它扩展了CSS的语法,并增加了许多有用的功能,如变量、嵌套、混合(Mixin)、继承以及模块化的结构…...
Git版本控制工具的原理及应用详解(四)
本系列文章简介: 随着软件开发的复杂性不断增加,版本控制成为了开发团队中不可或缺的工具之一。在过去的几十年里,版本控制工具经历了各种发展和演变,其中Git无疑是目前最受欢迎和广泛应用的版本控制工具之一。 Git的出现为开发者…...
AI图书推荐:ChatGPT全面指南—用AI帮你更健康、更富有、更智慧
你是否在努力改善你的健康? 你是否长期遭受财务困难? 你想丰富你的思想、身体和灵魂吗? 如果是这样,那么这本书就是为你准备的。 《ChatGPT全面指南—用AI帮你更健康、更富有、更智慧》(CHATGPT Chronicles AQuick…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
