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

嵌入式培训之系统编程(一)标准IO、文件操作

目录

一、系统编程概述

二、标准IO

(一)(以计算机为中心)标准IO

(二)io的分类

(三)man命令

三、文件读写操作

(一)文件操作步骤

(二)相关函数

1、fopen函数

2、fputc函数

3、fclose函数

4、fgetc函数

5、fgets函数

6、fputs函数

(三)练习

一、系统编程概述

二、标准IO

(一)(以计算机为中心)标准IO

 I:   键盘是标准输入设备        默认输入就是指键盘  /dev/input

        O: 显示器是标准输出设备        默认输出就是指显示器

        一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲

区,可以有效减少系统调用的效率,节省系统IO调度资源 

        linux中一切都是文件。文件用来存储数据(数据,指令)

(二)io的分类

头文件: stdio.h是标准输入输出头文件它在/usr/include/stdio.h目录下;

在使用头文件符号时,<>   是系统库函数,默认路径在/usr/include/下;

eg : stdio.h—>stdio.c—>libc.so —>/usr/lib  

libc.so中so是动态库,共享库;lib是开头,c是名字;

在使用头文件符号时," "   是用户自定义函数,默认是当前路径;

eg : xxx.h  —>xxx.c

注:ldd命令 查看该文件用了哪些库

        mv:改文件名(mv a文件 b文件);移动:(mv a文件 b目录)

(三)man命令

man  man  ==>所有man的帮助
man  xxx == man 1 xxx ===>查看当前xxx命令
man 2 xxx  ===>查看xxx对应的系统调用函数
man 3 xxx  ===》查看xxx对应的标准库函数

man 函数(查函数)

(1)左上角 FOPEN(3)//3个章节

(2)NAME  //介绍函数功能

(3)头文件

(4)函数原型(参数类型、返回值类型)

(5)DESCRIPTION(详细介绍)参数相关的关键点

(6)REIURN  VALUE  //返回值

主要用到前面三个章的内容:

  1. 命令行命令
  2. 系统函数调用
  3. C库跨平台调用
  4. 设备类文件介绍
  5. etc文件配置,相关处理,格式
  6. 游戏(不建议)
  7. 总体性描述
  8. 管理员使用命令
  9. 内核更新事件

三、文件读写操作

(一)文件操作步骤

1、打开文件  FILE(函数fopen) FILE* = fopen();

2、IO操作,读写操作

3、关闭文件

(二)相关函数

1、fopen函数

(1)一般形式:fopen(const char * pathname,const char *mode);

(2)mode:

r        打开文件,读文件(从文件刚开始读,且要求文件存在)
r+      打开文件,读写文件(从文件刚开始读,且要求文件存在)
w       清空文件或创建文件用于写文件(位于文件最开始的地方,文件可以不存在)
w+     打开文件,读写文件(位于文件最开始的地方,文件可以不存在)
         返回值:成功返回FILE的指针,否则返回空指针

(3)示例:

2、fputc函数

(1)一般形式:int fputc(int c,FILE *stream);

功能:  向流中写入一个字符
参数c:  要写入的字符
stream:  文件流指针
返回值:  成功返回写入的字符ASCII码值
            失败返回EOF

(2)示例:

3、fclose函数

(1) 一般形式:int fclose(FILE *stream);

(2)使用cat来查看文件内容

(3)示例:

4、fgetc函数

(1) 一般形式:int fgetc(FILE *stream);

功能:从流中读取一个字符
参数stream:文件流指针

返回值:成功返回读到字符的ASCII码值读到文件末尾返回EOF
            失败返回EOF,其中EOF代表-1;

(2)示例:

5、fgets函数

(1) 一般形式:char *fgets(char *s, int size, FILE *stream);

 功能:从stream流对象关联的文件中获取size大小字节的文本数据并存储到s对应的本地内存(栈区数组,堆区内存)
 参数: s 要存储数据的本地内存
                    size 要获取的数据长度,单位字节。
                    stream 要获取的目标文件流对象,
                    可以是stdin ,程序会阻塞等待
                    如果是普通文件fp 则指向文件第一行数据

  返回值:成功 返回指向有效数据的首地址,一般等于s的地址
                      失败 或者 文件末尾 NULL;

(2)gets和fgets的区别:  

1.gets是危险的,因为没有规范读到数据的上限
2.gets会去掉从终端读入的\n字符
3.fgets会读到n个数据,如果n个数据中存在\n字符则立即停止当 前的读取操作
4.fgets不会去掉从流中读到的\n字符        char buf[1024]; 

5.fgets(buff, sizeof(buff), stdin);           gets(buff);

(3)示例:

6、fputs函数

(1)一般形式:int fputs(const char *s, FILE *stream);        

功能:从s所在的本地内存中获取一行数据,并写入stream对应的文件流对象。
参数: s 要写的信息,一般是固定的字符串或者有数据的数组。
                    stream 要写入的目标文件流对象

返回值:成功 nonnegative number on success(大于0的数)
                      失败 -1(EOF);

(2)示例:

练习:复制(1.txt中的内容复制到2.txt中)用fgetc/fputc进行文本复制

扩展

(三)练习

1、用fgetc/fputc进行文本复制

2、用fgets/fputs复制,只能处理文本文件

http://www.xdnf.cn/news/556777.html

相关文章:

  • Liquid Wire 柔性应变传感器:金属凝胶导体 | 仿生肌肉长度监测 | 高精度动作控制
  • 特定领域 RAG中细调嵌入模型能否提升效果?
  • IVX:重构 AI 原生开发范式,让模型调用成为指尖艺术​
  • PostgreSQL简单使用
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 【深度学习-Day 14】从零搭建你的第一个神经网络:多层感知器(MLP)详解
  • 第六天的尝试
  • 服务器部署1Panel
  • 證券行業證券交易系統開發方案
  • 基于SpringBoot+Vue的学籍管理系统的设计与实现
  • Kubernetes在线练习平台深度对比:KillerCoda与Play with Kubernetes
  • 【开源工具】文件夹结构映射工具 | PyQt5实现多模式目录复制详解
  • 【鸿蒙开发】Hi3861学习笔记- MQTT通信
  • 统一端点管理(UEM):定义、优势与重要性
  • 从零开始:Python 从0到1轻松入门
  • 易路 AI 招聘:RPA+AI 颠覆传统插件模式,全流程自动化实现效率跃迁
  • 物业收费智能化:如何实现账单零差错自动生成?
  • SpringBean模块(三)具有生命周期管理能力的类(1)AutowireCapableBeanFactory
  • DOS常用命令及dos运行java
  • 协程+Flow:现代异步编程范式,替代RxJava的完整实践指南
  • NVIDIA Earth-2 AI 天气模型 DLI 课程:解锁全球风云的未来之匙
  • 4大AI智能体平台,你更适合哪一个呐?
  • 第六部分:第三节 - 路由与请求处理:解析顾客的点单细节
  • ⭐️白嫖的阿里云认证⭐️ 第二弹【课时3:大模型辅助内容生产场景】for 「大模型Clouder认证:利用大模型提升内容生产能力」
  • 基于YOLO11深度学习的变压器漏油检测系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】
  • 通过 API 获取 1688 平台店铺所有商品信息的完整流程
  • Vue+eElement ui el-input输入框 type=number 输入无效。赋值输入框也不显示(问题已解决)
  • FaceFusion 3.2.0 参数配置参考
  • Java实现定时任务的几种常见方式
  • 新闻媒体发稿:社会实践返家乡主题如何选择