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

嵌入式Linux学习 -- 软件编程3

四、IO

3. 标准IO

5. 文件的打开

9. fwrite
  • 原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  • 功能:

        向流中写入ptr指向的nmemb个对象,每个对象size个字节

  • 参数:

        ptr:指向数据空间的首地址

        size:写入的每个对象的大小

        nmemb:写入对象的个数

        stream:文件流指针

  • 返回值:

        成功返回实际写入对象的个数,失败返回0

10. fread
  • 原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE*stream);
  • 功能:

        从流中读取nmemb个对象到ptr指向的空间中,每个对象size个字节

  • 参数:

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

        size:读取对象的字节大小

        memb:读取对象的个数

        stream:文件流指针

  • 返回值:

        成功返回读到对象的个数,失败或者读到文件末尾返回0

通过fread和fwrite实现图片的拷贝

5. 流的定位

1. 概念

设置流的偏移量(光标位置)

2. 流的设置

1. fseek

  • 原型:int fseek(FILE *stream, long offset, int whence);
  • 功能:

        设置流的偏移量的标识

  • 参数:

        stream:文件流指针

        offset:偏移量

                > 0 向后偏移         < 0 向前偏移

        whence:标识

                SEEK_SET 文件开头        SEEK_CUR 当前位置           SEEK_END 文件末尾

  • 返回值:

        成功返回0 失败返回-1

2. ftell

  • 原型:long ftell(FILE *stream);
  • 功能:

        获得流的偏移量

  • 参数:

        stream:文件流指针

  • 返回值:

        成功返回流的偏移

3. rewind

  • 原型:void rewind(FILE *stream);
  • 功能:

        将流重新定位到开头                rewind == feek(filename, 0, SEEK_SET)

通过 fseek 和 ftell 实现获取文件的长度

4. 文件IO

1. 概念

1. 标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作

2. 标准IO是库函数,文件IO是系统调用

2. 系统调用与库函数

1. 系统调用

        是Linux内核中的代码,只能在Linux系统中使用

2. 库函数

        是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统调用完成对应功能

3. 文件IO的接口

1. 接口函数

                        标准IO                                                                               文件IO 

fopen                                                 ------------------------------------               open

fclose                                                -------------------------------------              close

fgetc, fgets, fscanf, fread / fputc, fputs, fprintf, fwrite ----------------              read / write

fseek / ftell / rewind                          --------------------------------------              lseek

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_CREAT                       文件不存在创建(注意要给定创建文件的权限)

                O_TRUNC                      文件存在截断为0(清0)

                O_APPEND                    追加

                O_EXCL                         文件存在报错

  • 返回值:

        成功返回新文件描述符,失败返回-1

1. 有三个特殊的文件描述符:标准输入(0)、标准输出(1)、标准错误(2)

2. 文件描述符特点:

非负整数

取尚未被占用的最小的非负整数

文件描述符是有上限的,到达上限后再打开会报错

3. close
  • 原型:int close(int fd);
  • 功能:

        关闭文件描述

4. 文件的打开

标准IO文件IO

r

O_RDONLY
r+O_RDWR
wO_WRONLY | O_CREAT | O_TRUNC , 0664
w+O_RDWR | O_CREAT | O_TRUNC, 0664
aO_WRONLY | O_APPEND | O_CREAT, 0664
a+O_RDWR | O_APPEND | O_CREAT, 0664

http://www.dtcms.com/a/327793.html

相关文章:

  • UNet改进(32):结合CNN局部建模与Transformer全局感知
  • Docker 101:面向初学者的综合教程
  • 【C#】从 Queue 到 ConcurrentQueue:一次对象池改造的实战心得
  • 激活函数篇(2):SwiGLU | GLU | Swish | ReLU | Sigmoid
  • 如何查看当前Redis的密码、如何修改密码、如何快速启动以及重启Redis (Windows)
  • 鹧鸪云:光伏施工流程管理的智能“导航仪”
  • 云平台监控-云原生环境Prometheus企业级监控实战
  • 【Redis与缓存预热:如何通过预加载减少数据库压力】
  • RoboNeo美图AI助手
  • 如何单独修改 npm 版本(不改变 Node.js 版本)
  • npm、pnpm、yarn区别
  • 深度解析Mysql的开窗函数(易懂版)
  • docker-compose安装ElasticSearch,ik分词器插件,kibana【超详细】
  • 夜莺开源监控,模板函数一览
  • 集合,完整扩展
  • 任务调度系统设计与实现:Quartz、XXL-JOB 和 Apache Airflow 对比与实践
  • 【项目设计】高并发内存池
  • windows系统端口异常占用删除教程
  • Go面试题及详细答案120题(0-20)
  • [TryHackMe]Internal(hydra爆破+WordPress主题修改getshell+Chisel内网穿透)
  • 《Q————Mysql连接》
  • Linux软件编程:IO(二进制文件)、文件IO
  • 【25-cv-08993】T Miss Toys 启动章鱼宠物玩具版权维权,15 项动物玩偶版权均需警惕
  • 如何使用gpt进行模式微调(2)?
  • 使用Spring Boot对接欧州OCPP1.6充电桩:解决WebSocket连接自动断开问题
  • 无文件 WebShell攻击分析
  • php+apache+nginx 更换域名
  • SpringCloud 核心内容
  • 82. 删除排序链表中的重复元素 II
  • 计算机网络摘星题库800题笔记 第4章 网络层