嵌入式开发教程之Linux下IO流

一、文件的概念和类型

文件基础:

概念:一组相关数据的有序集合,文件名、路径。通过文件名指定访问什么文件。

文件类型:

  • 常规文件 r,分为:普通文件,文本文件(可见字符)、二进制文件(编译好的程序)
  • 目录文件 d, 文件夹
  • 字符设备文件 c,具体的设备,通过设备所对应的设备文件,如何对应?如何访问呢?
  • 块设备文件 b,
  • 管道文件 p pip, 不同进程通过管道交互。
  • 套接字文件 s,网络通信,本地通信
  • 符号链接文件 I,和window的快捷方式一样,通过符合链接文件放到具体内容。

注意:不同操作系统文件类型不同。

二、如何理解标准IO

标准I/O - 介绍

标准I/O由ANSI C标准定义,C89,C99,C库提供一系列函数,C中定义好的用于输入和输出的一系列函数。标准I/O通过C库实现的,只要有C库就有标准I/O。

主流操作系统上都实现了C库,通过标准I/O来访问。

标准I/O通过缓冲机制减少系统调用,实现更高效率。

三、流(FILE)的含义

FILE

标准IO用一个结构体类型来存放打开的文件的相关信息

标准I/O的所有操作都是围绕FILE来进行

流(stream)

FILE又被称为流(stream)

文本流/二进制流

|--------|-------------------------|-------------------|
| 操作系统 | 二进制流程 | 文本流 |
| Window | 换行符 '\n',一个字符,ASCLL 10 | 换行符,'/r''/n',两个字符 |
| Linux | 换行符 '\n',一个字符 ||

四、流的缓冲类型

  • 全缓冲(普通文件FILE,默认缓冲类型)

写的时候:当流的缓冲区满的时候才执行I/O操作。

读的时候:会把一批数据读到缓冲区,每次从缓冲区读数据,等到缓冲区空的时候,才会再读一批数据到缓冲区。

  • 行缓冲(标准I/O,默认类型)

当在输入和输出中遇到换行符('\n')时,进行I/O操作。

当流和一个终端关联时,典型的行缓冲。

标准输出:是一个行缓存,只有缓冲区满,或者是遇到换行符的时候,才会执行文件的实际操作。

注意:在用print操作打印信息的时候,加上\n,如果不加,信息只是写到缓冲区,没有写到实际的终端上,实际上终端是看不见的。

  • 无缓存

数据直接写入文件,流不进行缓冲。

标准I/O预定义3个流,程序运行时自动打开

|-------|---|---------------|--------|
| 标准输入流 | 0 | STDIN_FILENO | stdin |
| 标准输出流 | 1 | STDOUT_FILENO | stdout |
| 标准错误流 | 2 | STDERR_FILENO | stderr |

全缓冲与无缓冲、行缓冲的区别

  • 全缓冲‌:数据在缓冲区中累积,直到缓冲区满或文件结束才进行I/O操作。
  • 行缓冲‌:每当遇到换行符时进行I/O操作,适用于需要实时反馈的场景,如标准输入输出。
  • 无缓冲‌:数据直接写入或读出,适用于需要即时反馈的场景,如标准错误输出‌
相关推荐
壮哥_icon7 分钟前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi16 分钟前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_1800790524736 分钟前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
张小姐的猫1 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯1 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小稻穗1 小时前
市场调研样本选型坐标系:2026六家国内样本平台能力横向校验
大数据·运维·数据分析
栩栩云生1 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
AOwhisky1 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
AOwhisky2 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
imc.112 小时前
linux基础IO
linux·运维·服务器