嵌入式第十七天!(文件IO)

文件IO:

标准IO和文件IO的区别:

    1. 标准IO是库函数,是对系统调用的封装

    2. 文件IO是系统调用,是Linux内核中的函数接口

    3. 标准IO是有缓存的

    4. 文件IO是没有缓存的

  1. 操作步骤:

        打开 -> 读/写 -> 关闭

  2. 打开文件(open):

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

    功能:打开文件并且获得文件描述符

    参数:

        pathname:要打开的文件名

        flags:标志位

O_RDONLY只读
O_WRONLY只写
O_RDWR读写
O_APPEND追加
O_ASYNC异步IO
O_CREAT文件不存在创建
O_TRUNC文件存在截断(清0)

        返回值:

            成功返回文件描述符(很小的非负整数)

            失败返回-1

        新生成的文件描述符总是为尚未使用的最小的非负整数

        0:stdin        1:stdout        2:stderr

  3. 关闭文件(close):

int close(int fd);

    功能:将fd对应的文件描述符关闭

  4. 读写(read/write)

    1. write

ssize_t write(int fd, const void *buf, size_t count);

    功能:向fd对应的文件中写入buf指向的count个字节

    参数:

        fd:文件描述符

        buf:写入数据空间首地址

        count:写入的字节数

    返回值:

        成功返回实际写入字节数

        失败返回-1

    2. read

ssize_t read(int fd, void *buf, size_t count);

    功能:从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中

    参数:

        fd:文件描述符

        buf:存放数据空间的首地址

        count:想要读取数据字节数

    返回值:

        成功返回实际读到的字节数

        失败返回-1

        读到文件末尾返回0

  作业:

        1. 利用read和write实现文件内容的拷贝(将src.jpg中的内容拷贝到dst.jpg文件中)

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(void)
{int fsrc = 0;int fdst = 0;char tmpbuff[4096] = {0};int nret = 0;fsrc = open("src.jpg", O_RDONLY);if(fsrc == -1){perror("fail to open");return -1;}fdst = open("dst.jpg", O_WRONLY | O_TRUNC | O_CREAT, 0664);if(fdst == -1){perror("fail to open");return -1;}while(1){nret = read(fsrc, tmpbuff, sizeof(tmpbuff));if(nret == 0){break;}write(fdst, tmpbuff, nret);}close(fsrc);close(fdst);return 0;
}

        2.1028:人口普查

#include <stdio.h>
#include <string.h>struct old
{char name[32];int year;int mon;int day;
};int main(void)
{struct old od[100000];int N = 0;int i = 0;int ret = 0;int max = 0;int min = 0;scanf("%d", &N);if(N>100000){printf("intput error\n");return -1;}for(i = 0; i < N; i++){scanf("%s %d/%d/%d", od[i].name, &od[i].year, &od[i].mon, &od[i].day);}for(i = 0; i < N; i++){if(od[i].year >= 1814 && od[i].year <= 2014){if(od[i].year == 1814 && (od[i].mon < 9 || od[i].day < 6)){ret = ret;for (int j = i; j < N - 1; j++){strcpy(od[j].name, od[j + 1].name);od[j].year = od[j + 1].year;od[j].mon = od[j + 1].mon;od[j].day = od[j + 1].day;}i--;N--;}else if(od[i].year == 2014 && (od[i].mon > 9 || od[i].day > 6)){ret == ret;for (int j = i; j < N - 1; j++){strcpy(od[j].name, od[j + 1].name);od[j].year = od[j + 1].year;od[j].mon = od[j + 1].mon;od[j].day = od[j + 1].day;}i--;N--;}else{ret++;}}}for(i = 0; i < ret-1; i++){if(od[max].year < od[i].year){max = i;}if(od[max].year == od[i].year && od[max].mon < od[i].mon){max = i;}if(od[max].year == od[i].year && od[max].mon == od[i].mon && od[max].day < od[i].day){max = i;}if(od[min].year > od[i].year){min = i;}if(od[min].year == od[i].year && od[min].mon > od[i].mon){min = i;}if(od[min].year == od[i].year && od[min].mon == od[i].mon && od[min].day > od[i].day){min = i;}}printf("%d %s %s\n", ret, od[min].name, od[max].name);return 0;	
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Visual Studio】技巧 :自动与活动文档同步

在这里插入图片描述 工具 -> 选项 -> 项目和解决方案 - 勾选上面的 我厉害不&#xff01;&#xff01;&#xff01;

【STM32 物联网】基础AT指令与基础Wifi功能AT指令

文章目录 前言一、基础AT指令1.1 测试AT启动1.2 重启模块1.3 查看版本信息1.4 进入深度睡眠模式1.5 开关回显1.6 恢复出场设置1.7 UART配置设置临时设置&#xff0c;不保存到Flash设置串口保存到Flash 1.8 设置sleep模式查询当前sleep模式设置当前sleep模式 二、基础Wifi功能AT…

OpenCV-42 直方图均匀化

目录 一、直方图均匀化原理 二、直方图均匀化在OpenCV中的运用 一、直方图均匀化原理 直方图均匀化是通过拉伸像素强度的分布范围&#xff0c;使得在0~255灰阶上的分布更加均匀&#xff0c;提高图像的对比度。达到改善图像主管视觉效果的目的。对比度较低的图像适合使用直方…

2024年 前端JavaScript入门到精通 第二天 笔记

2.1 赋值运算符 2.2 自增运算符 2.3 比较运算符 2.4 逻辑运算符以及优先级 2.5 JS基础Day2-23-if单分支语句以及判断成绩案例 2.6 JS基础Day2-24-if双分支语句以及判断润年案例 2.7 JS基础Day2-25-i侈分支语句以及上午总结 2.8 JS基础Day2-26-三元运算符以及求最大值案例 2.9 J…

在 MyBatis 中,可以使用相同的 SQL 映射语句进行批量删除和单个删除。

目录 前端代码&#xff1a; 后端代码&#xff1a; controller service层接口 service接口的实现 mapper层接口 xml sql 效果&#xff1a;&#xff08;点击操作列的删除&#xff0c;可删除一行数据。勾选多个多选框再点击批量删除&#xff0c;可删除多个&#xff09; …

PyCharm 主题和字体 (Scheme Editor Font)

PyCharm 主题和字体 [Scheme & Editor Font] References Scheme & Editor Font File -> Settings -> Editor -> Colors & Fonts -> Font Show only monospaced fonts&#xff1a; 只显示等宽字体。编程时使用等宽字体效果较好。 References [1] Yon…

Opencv实战(1)读取与图像操作

Opencv 文章目录 Opencv一、读取图片1.imshow2.namedWindow3.imshow4.效果图 二、像素操作(1).访问像素1. at()2.Mat_ (2).遍历像素1.指针遍历2.迭代器遍历 (3).threshold(4).通道分离1.split2.merge (5)Gamma矫正 三、深浅拷贝 一、读取图片 1.imshow Mat imread(const stri…

Spark---环境搭建---入门概念

目录 环境搭建 测试 Apache Spark是用于大规模数据处理的统一分析引擎&#xff1b; spark 仅仅替代了hadoop的mapraduce&#xff1b; spark比hadoop快一百倍&#xff1b; 环境搭建 1&#xff1a;解压&#xff1b; 2&#xff1a;配置spark环境变量&#xff1a; vim /etc/pro…

查看 PyCharm 代码文件目录位置

查看 PyCharm 代码文件目录位置 1. Show in Files2. Copy PathReferences 1. Show in Files right click -> Show in Files / Show in Explorer 即可打开目录 2. Copy Path right click -> Copy Path 即可复制目录或文件路径 References [1] Yongqiang Cheng, http…

入门级10寸加固行业平板—EM-I10J

亿道信息以其坚固耐用的智能终端设备而闻名&#xff0c;近日发布了一款理想入门级 10 英寸加固平板电脑—I10J。 EM-I10J​​ 这是一款 10 英寸的平板电脑&#xff0c;主要运行 Windows 10操作系统&#xff0c;带有硬化塑料外壳&#xff0c;具有 IP65 防水防尘功能和 MIL-STD 8…

DAP下载程序(在MDK上配置DAP)以及程序调试(Keil uVision5软件的使用)

目录 1. 在MDK上配置DAP 2. 了解不同开发板不同的下载算法 3. DAP调试程序 3.1 JTAG/SWD调试原理概述 3.2 基础执行控制按钮 3.3 查看程序段/函数执行时间 3.4 结束仿真报错解决方法 3.5 工具栏常用窗口按钮介绍 3.5.1 Call Stack窗口&#xff1a;查看函数调…

ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

文章目录 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整获取音频长度pydub获取音频长度获取时长精确到秒格式设定 mutagen获取音频长度 调整音量视频音量调整注意事项 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整 老王媳妇说上次那个pip挺好…