当前位置: 首页 > news >正文

嵌入式学习——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

&#xff08;1&#xff09;标准IO——有缓存 1.打开文件 fopen 2.读写文件 fgetc/fputc fgets/fputs fprintf/fscanf 3.关闭文件 fclose 1. 缓存&#xff08;标准I…...

STM32学习计划

前言&#xff1a; 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程&#xff0c;会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程&#xff0c;然后是学习完正点原子的I.M…...

小米15曝光?可能会要稍微涨价

也许是感受到了智能机市场的逐渐复苏&#xff0c;最近各大手机品牌发售新品的速度明显加快了。从4月份的Redmi、一加&#xff0c;再到5月份一大堆vivo、OPPO新机型的发布。而近日&#xff0c;有关小米14即将发售的消息也是悄咪咪的放了出来。 去年发售的小米14可以说是狠狠地让…...

深度优先搜索汇总

常用英文 最近公共祖先&#xff08;Lowest Common Ancestor&#xff0c;简称LCA&#xff09; posterity&#xff0c;英语单词&#xff0c;主要用作名词&#xff0c;作名词时译为“子孙&#xff0c;后裔&#xff1b;后代”。 什么是深度优先搜索 深度优先搜索&#xff0c;D…...

【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…...

Python学习之路 | Python基础语法(一)

数据类型 Python3 中常见的数据类型有&#xff1a; Number&#xff08;数字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布尔类型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元组&#xff09;Set&#xff08;集合&#xff09;Dict…...

【已解决】AttributeError: module ‘clip‘ has no attribute ‘load‘

问题描述&#xff1a;运行YOLO-world时出现AttributeError: module clip has no attribute load。 情况分析&#xff1a; 1. 未安装clip包。 2. clip包中没有load方法。 解决办法&#xff1a; 1.重新安装clip包。 pip install clip pip install openai-clip 2. 安装后仍然报…...

安卓实现连接wesokcet

在build.gradle里引入依赖&#xff1a; implementation org.java-websocket:Java-WebSocket:1.5.2 在Androidmanifest.xml 文件里加入网络权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" /> 代码&#xff1a; package com.x…...

Xinstall助力App下载量精准统计,洞悉推广效果

在移动互联网时代&#xff0c;App的下载量是衡量一个应用受欢迎程度的重要指标。然而&#xff0c;要精准统计App的下载量并不是一件容易的事情。为了解决这一难题&#xff0c;越来越多的开发者选择了Xinstall这一专业的App全渠道统计服务商。 Xinstall作为国内领先的App统计平…...

CSS字体修饰

1&#xff09;文字大小 &#xff08; font-size &#xff09; /* 设置文字大小为24个像素 */ font-size: 24px; 2&#xff09;字体粗细 &#xff08; font-weight &#xff09; /* 字体粗细在100-900之间可以进行调整 */ /* 字体加粗 */ font-weight: bolder; /* 或 fon…...

高并发缓存服务的构建要点与陷阱

1. 缓存基础与特征 在讨论高并发环境下构建缓存服务的问题前&#xff0c;我们需要先了解缓存的基础和特征。缓存&#xff08;Cache&#xff09;是一种高速数据存储层&#xff0c;它可以存储临时数据&#xff0c;以便将来的请求能更快地获取到这些数据。从本质上讲&#xff0c;…...

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 &#xff08;窗口需处于激活状态&#xff09;(2)、监听全局按键事件 &#xff08;窗口无需处于激活状态&#xff09;(3)、补充&#xff1a;自定义窗口菜单快捷…...

【jest 调试 - vscode debug】

jest 测试typescript&#xff0c;如果想对测试文件本身断点调试。 安装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、题目描述 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&…...

27- ESP32-S3 USB虚拟串口(USB-OTG 外设介绍)

ESP32-S3 USB虚拟串口详解 USB-OTG 外设介绍 USB-OTG&#xff1a; USB-OTG是一种USB规范&#xff0c;允许嵌入式系统&#xff08;如手机、平板电脑、单片机系统等&#xff09;在没有主机&#xff08;如个人电脑&#xff09;的情况下直接相互通信&#xff0c;同时也能够作为传…...

PostgreSQL查看sql的执行计划

PostgreSQL查看sql的执行计划 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777在PostgreSQL中&#xff0c;查看…...

macOS Ventura 13如何设置定时重启(命令行)

文章目录 macOS Ventura 13如何设置定时重启(命令行)前言具体设置步骤及命令解释其他 macOS Ventura 13如何设置定时重启(命令行) 前言 由于升级 macOS 13 Ventura 之后&#xff0c;之前在节能里面通过鼠标点击设置开机关机的方法不能用了&#xff0c;现在只能用命令设置开机…...

【sass简介以及如何安装使用】

Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;是一个层叠样式表&#xff08;CSS&#xff09;预处理器&#xff0c;它扩展了CSS的语法&#xff0c;并增加了许多有用的功能&#xff0c;如变量、嵌套、混合&#xff08;Mixin&#xff09;、继承以及模块化的结构…...

Git版本控制工具的原理及应用详解(四)

本系列文章简介&#xff1a; 随着软件开发的复杂性不断增加&#xff0c;版本控制成为了开发团队中不可或缺的工具之一。在过去的几十年里&#xff0c;版本控制工具经历了各种发展和演变&#xff0c;其中Git无疑是目前最受欢迎和广泛应用的版本控制工具之一。 Git的出现为开发者…...

AI图书推荐:ChatGPT全面指南—用AI帮你更健康、更富有、更智慧

你是否在努力改善你的健康&#xff1f; 你是否长期遭受财务困难&#xff1f; 你想丰富你的思想、身体和灵魂吗&#xff1f; 如果是这样&#xff0c;那么这本书就是为你准备的。 《ChatGPT全面指南—用AI帮你更健康、更富有、更智慧》&#xff08;CHATGPT Chronicles AQuick…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

软件工程教学评价

王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中&#xff0c;您通过丰富的实例&#xff0c;将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻&#xff0c;让这些理论不再是停留在纸面的名词&#xff0c;而是可以指导…...

多模态大语言模型arxiv论文略读(112)

Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文标题&#xff1a;Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文作者&#xff1a;Jea…...

【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解

Nginx 是什么&#xff1a;高性能的HTTP和反向代理Web服务器。怎么用&#xff1a;通过配置文件定义代理规则、负载均衡、静态资源服务等。为什么用&#xff1a;提升Web服务性能、高并发处理、负载均衡和反向代理。优缺点&#xff1a;轻量高效&#xff0c;但动态处理能力较弱&am…...