嵌入式(标准IO)

2023-11-18

嵌入式自学第十三天

1、Linux IO进程课程目的:学习编写linux应用程序(APP)
2、Linux文件的种类 :
常规文件
目录文件
字符文件
块文件
链接文件(相当于windows快捷方式)
3、IO的概念
I input 输入设备 比如键盘鼠标都是Input设备
O output 输出设备 比如显示器
优盘,网口,既是输入也是输出

3、系统调用和库函数
系统调用就是操作系统提供的接口函数.
如果我们把系统调用封装成库函数就可以起到隔离的作用,提供程序的可移植性。
Printf就是库函数然后调用了系统调用才在显示器上显示字符。
4、流的概念
就是数据的流,在程序中就是一个结构体。
5、Windows 和linux的换行符区别
Windows是\r\n
Linux 是\n
6、缓冲区的概念
为了减少操作IO设备的次数,提高运行效率,在内存里面设置的缓冲区,
全缓冲:缓冲区满才输出
行缓冲:遇到换行符输出
7、 三种标准IO :

	标准输入流(键盘)		0	STDIN_FILENO		stdin
	标准输出流(显示器)	1	STDOUT_FILENO		stdout
	标准错误流			2	STDERR_FILENO		stderr

8、缓冲区概念演示:
Buffer.c 代码
程序正常结束会刷新缓冲区。

9、Sleep函数:是释放cpu给其他应用程序使用的库函数。使用的头文件是#include <unistd.h>
查看头文件方法:man 2 函数 ,或者 man 3 函数

10、编译错误告警查看方法
在这里插入图片描述
文件的打开和关闭概念
打开就是占用资源
关闭就是释放资源
文件的打开
11、文件的打开函数
FILE *fopen (const char *path, const char *mode);
Path: 普通文件当前路径不需要加目录,其他要使用完整的路径
Mode:
返回值:出错返回NULL,所以使用fopen函数必须判断是否为空
*

12、文件打开的模式(非常重要)

在这里插入图片描述

13、编译错误:

f_open.c:9:38: error: ‘errno’ undeclared (first use in this function)
         printf("fopen:%s\n",strerror(errno));  
error: ‘errno’ undeclared  表示errno变量没有定义
解决方法:如果是系统变量用include 头文件,如果是你自己的,自己手动定义。
f_open.c:10:29: warning: implicit declaration of function ‘strerror’ [-Wimplicit-function-declaration]
         printf("fopen:%s\n",strerror(errno));

warning: implicit declaration of function ‘strerror’  表示strerror函数隐示的声明
解决方法:include 添加对应的头文件。

14、
perror 库函数 头文件stdio.h
strerror 库函数 头文件 errno.h string.h
perror和strerror 功能:打印系统的错误描述(注意:是系统错误,不是你自己代码错误)
文件的关闭:
函数原型:int fclose(FILE *stream)
15、fclose()调用成功返回0,失败返回EOF(-1),并设置errno
16、流关闭时自动刷新缓冲中的数据并释放缓冲区,比如:常规文件把缓冲区内容写入磁盘
17、当一个程序正常终止时,所有打开的流都会被关闭
18、fclose()函数的入参stream必须保证为非空,否则出现断错误。
标准IO的字符输入和输出

字符的输入(读单个字符):
int fgetc(FILE *stream);
int getc(FILE *stream); //宏
int getchar(void);
成功时返回读取的字符;若到文件末尾或出错时返回EOF(-1),
getchar()等同于fgetc(stdin)
getc和fgetc区别是一个是宏一个是函数

注意事项:
1函数返回值是int类型不是char类型,主要是为了扩展返回值的范围。
2 stdin 也是FILE *的指针,是系统定义好的,指向的是标准输入(键盘输入)
3 打开文件后读取,是从文件开头开始读。读完一个后读写指针会后移。读写注意文件位置!
4 调用getchar会阻塞,等待你的键盘输入

字符的输出(写单个字符):
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);

成功时返回写入的字符;出错时返回EOF
putchar©等同于fputc(c, stdout)
注意事项:
1返回和输入参数都是int类型
2遇到这种错误:Bad file descriptor, 很可能是文件打开的模式错误(只读模式去写,只写模式去读)

行输入(读取整个行)
char *gets(char *s); 读取标准输入到缓冲区s
char *fgets(char *s, int size, FILE *stream);

成功时返回s,到文件末尾或出错时返回NULL
遇到’\n’或已输入size-1个字符时返回,总是包含’\0’

注意事项:
1 gets 函数已经被淘汰,因为会导致缓冲区溢出
2 fgets 函数第二个参数,输入的数据超出size,size-1个字符会保存到缓冲区,最后添加’\0’,如果输入数据少于size-1 后面会添加换行符。

行输出(写整行)

int puts(const char *s);
int fputs(const char *s, FILE *stream);

成功时返回非负整数;出错时返回EOF
puts将缓冲区s中的字符串输出到stdout,并追加’\n’
fputs将缓冲区s中的字符串输出到stream,不追加 ‘\n’

二进制读写

文本文件和二进制的区别:
存储的格式不同:文本文件只能存储文本。

计算机内码概念:文本符号在计算机内部的编码(计算机内部只能存储数字0101001…,所以所有符号都要编码)

二进制读写函数格式:
size_t fread(void *ptr, size_t size, size_t n, FILE fp); //从文件中把数据读到ptr中
void *ptr 读取内容放的位置指针
size_t size 读取的块大小
size_t n 读取的个数
FILE *fp 读取的文件指针

size_t fwrite(const void ptr, size_t size, size_t n, FILE fp); //从ptr把数据写到fp中
void *ptr 写文件的内容的位置指针
size_t size 写的块大小
size_t n 写的个数
FILE *fp 要写的文件指针

注意事项:
文件写完后,文件指针指向文件末尾,如果这时候读,读不出来内容。
解决办法:移动指针(后面讲解)到文件头;关闭文件,重新打开

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式(标准IO) 的相关文章

随机推荐

  • eNSP配置不同VLAN间通信实例

    1 实验拓扑图 2 配置命令 lsw1
  • Settling the Debate: Multi Rail Vs. Single Rail Power Supplies

    原文链接 https thinkcomputers org settling the debate multi rail vs single rail power supplies Ever since multi rail PSUs we
  • 海康摄像头以GB28181国标协议接入国标流媒体服务器流断码问题的解决办法

    随着安防行业的规范化 GB28181协议被作为中国安防行业标准应用在各个领域 尤其在交警 公安等政府相关工程应用甚是广泛 但是由于GB28181协议的兴起在最近几年 导致很多大型厂家各自有各自的私自标准 从而导致各个平台之间对接会出现很多的
  • Git常见问题及报错

    1 解决git clone报错Peer s Certificate has expired的问题 以往在学习一些github上的开源项目时 都是直接复制了项目的地址 然后在主机上git clone一下即可 然而最近发现总是报错 报错内容如下
  • 征途服务器文件,如何使用云服务器架设征途

    如何使用云服务器架设征途 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 Linux云服务器一般采用SSH连接方式 使用密
  • Linux杂项设备驱动

    一 概念 杂项设备是一种特殊的字符设备 在linux2 6之后出现 与platform虚拟总线相关 通常嵌套在 platform 总线驱动中 实现复杂的驱动 其主设备号固定为10 设备注册是用主设备号10来调用register chrdev
  • 嵌入式 OpenSSL 常用函数——Base64编码及解码和证书操作

    Base64编码就是把二进制数据转换为可见的ASCII字符 Base64解码是相反的过程 主要函数 1 Base64编码初始化函数 VoidEVP EncodeInit EVP ENCODE CTX ctx 参数ctx IN 用于保存Bas
  • Knuth 洗牌算法

    核心思想 洗牌算法 Knuth shuffle算法 对于有n个元素的数组来说 为了保证洗牌的公平性 应该要能够等概率的洗出n 种结果 举例解释如下 开始数组中有五个元素 在前五个数中随机选一个数与第五个数进行交换 每个数都有五分之一的概率被
  • 抽签小程序(C语言随机数)

    最近班级里需要人员抽签参加活动 闲来无事用java的 Math random 方法 java util Random 写了一个随机抽签的 所以我又了解了一下C语言的随机数获取 C语言的随机数获取 参考 http c biancheng ne
  • 计算机房选址,数据中心机房如何选址 数据中心机房如何日常维护

    导读 众所周知 数据中心机房建设规范标准给出了数据中心机房的建设要求 包括数据中心机房分级与性能要求 机房位置选择及设备布置 环境要求 建筑与结构 空气调节 电气技术 电磁屏蔽 机房布线 机房监控与安全防范 给水排水 消防的技术要求 众所周
  • MySQL如何查看未提交的事务SQL

    点击上方蓝字关注我 MySQL中经常遇到事务中的SQL正在执行或执行完成后未提交 如何找出对应的SQL 1 查看正在执行的SQL 查看事务中正在执行的SQL方式有多种 例如 1 1 通过processlist查看 会话1 执行1个SQL m
  • Mabot机器人趣味视频教程-变速风扇

    如何从炎热的夏天中解脱 利用Mabot制作一个电风扇或许是个好主意 制作电风扇之前 我们需要提前了解一下电风扇的工作原理 电风扇主要是由一个旋转轴带动扇叶进行旋转 我们可以将五孔梁当做扇叶 Mabot的驱动球可以当做旋转轴 然后加上底座和支
  • awk字符串函数(printf格式化输出) -- shell

    awk有许多强大的字符串函数 gsub r s 在整个 0中 用s代替r gsub r s t 在整个t中 用s代替r 替换字符串 index s t 返回s中字符串t的第一位置 未用过 length s 返回s长度 c语言strlen m
  • 题12:字符串匹配Pabinkarp(上)

    package 字符串问题 public class case12 字符串匹配之Pabinkarp public static void main String args String s ABABABA 源字符串 String p BAB
  • 2022年江苏省大学生电子设计竞赛(TI杯)电赛 B题 无人机 省级一等奖记录 “一个摆烂人的独白”

    前期 从大一进校开始 我就参加了学校的创新实验室 遇到了很多很好的老师 但种种原因吧 实验室断代了 我也算搭草台班子 大一开始就作为实验室负责人 开始负责实验室的各项事务 大一寒假的时候 老师让我在校电赛试试无人机 初生牛犊不怕虎 也不知道
  • 在 Flutter 中实现一个浮动导航栏

    此图与正文无关 只是为了好看 写在前面 这段时间一直在学习 Flutter 在 dribble 上看到一张导航栏设计图 就是下面这张 感觉很是喜欢 于是思考着如何在 Flutter 中实现这个效果 设计图作者 Luk Stra k 经过一番
  • Apollo平台计算框架CyberRT

    Cyber RT 框架 Cyber RT Robotic Technology 是一种基于ROS Robot Operating System 的开发框架 专门设计用于构建高性能 实时性要求较高的机器人应用程序 旨在提供一套可靠 高效 灵活
  • Java并发编程必备:分布式锁的选型和性能对比

    当涉及到分布式系统中的并发控制和数据一致性时 分布式锁是一种常见的解决方案 下面我将对几种常见的分布式锁实现原理 实现示例 应用场景以及优缺点进行详细分析 1 基于数据库的分布式锁 实现原理 基于数据库的分布式锁使用数据库的事务机制和唯一索
  • Vue实现点击复制文本功能

    1 功能 在页面中实现点击复制内容到粘贴板的功能 2 安装clipboard npm install clipboard 3 封装工具类 新建clipboard js 内容如下 import Vue from vue import Clip
  • 嵌入式(标准IO)

    嵌入式自学第十三天 1 Linux IO进程课程目的 学习编写linux应用程序 APP 2 Linux文件的种类 常规文件 目录文件 字符文件 块文件 链接文件 相当于windows快捷方式 3 IO的概念 I input 输入设备 比如