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

标准文件和系统文件I/O

文件:标准文件IO、系统文件IO

Linux中一切皆文件(除网口外)。

标准文件IO:C语言标准库中的文件操作函数
fopen、fread、fwrite、fclose、fprintf

系统文件IO:由操作系统直接提供的接口、直接与内核交互
open、read、write、close

差异:
1、缓存机制
标准IO:
默认使用缓冲区,数据先写入缓冲区,当满足条件时才做实际操作。
作用:减少系统调用次数,提升效率。
系统IO:
没有默认缓冲区,每次都是进行系统调用,效率低。
2、跨平台性
标准IO:
接口由C标注你定义,与操作系统无关,同一代码可在不同平台运行,跨平台性强。
系统IO:
接口是由操作系统决定,所以不能跨平台。
3、操作对象
标准IO:
操作对象是 FILE*, 其封装了文件描述符、缓冲区等信息。
系统IO:
Linux下操作对象是文件描述符,Windows下操作对象是句柄。
4、使用场景
标准IO:
通常在用户态下进行个操作。
系统IO:
一般用于底层设备驱动文件等控制。


#include <stdio.h>

/*
* 功能说明:以mode方式打开path文件
* 参数1:将要打开文件的路径及文件名
* 参数2:打开文件的方式
*   r   以只读方式打开文件,文件指针指向文件起始位置。
*   r+  以读写方式打开文件,文件指针指向文件起始位置。
*   w   以写的文件打开文件,如果文件存在则清空否则创建,文件指针指向文件起始位置。
*   w+  以读写方式打开文件,如果文件不存在则创建否则清空,文件指针指向文件起始位置。
*   a   以追加方式打开文件,如果文件不存在则创建,文件指针指向文件末尾位置。
*   a+  以读和追加方式打开文件,如果文件不存在则创建,如果读文件则文件指针指向文件起始位置,如果追加(写)则文件指针指向文件末尾位置。
* 返回值:成功返回FILE指针,失败返回NULL并且errno被设置。
*/
FILE *fopen(const char *path, const char *mode);

/*
* 功能说明:读取文件中的数据
* 参数1:用于存储待读取的数据
* 参数2:每次读取的字节数
* 参数3:总共读取的次数
* 参数4:待读取文件的FILE指针
* 返回值:返回完整读取的nmemb数
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

/*
* 功能说明:向文件中写入数据
* 参数1:待写入的数据
* 参数2:每次写入的字节数
* 参数3:总共写入的次数
* 参数4:待写入文件的FILE指针
* 返回值:返回完整写入的nmemb数
*/
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

/*
* 功能说明:关闭文件
* 参数1:待关闭文件的FILE指针
* 返回值:成功返回0,失败返回EOF且errno被设置
*/
int fclose(FILE *stream);

http://www.lryc.cn/news/592998.html

相关文章:

  • 车载刷写框架 --- 关于私有节点刷写失败未报引起的反思
  • 《命令行参数与环境变量:从使用到原理的全方位解析》
  • 移除debian升级后没用的垃圾
  • laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡
  • 2025第15届上海国际生物发酵展:聚焦合成生物与绿色制造,共启生物经济新时代
  • Rust Web 全栈开发(十):编写服务器端 Web 应用
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(下)
  • 【C# in .NET】19. 探秘抽象类:具体实现与抽象契约的桥梁
  • xss的利用
  • CS231n-2017 Lecture2图像分类笔记
  • Kafka深度解析:架构、原理与应用实践
  • [论文阅读] 人工智能 + 软件工程 | 强化学习在软件工程中的全景扫描:从应用到未来
  • windows docker-02-docker 最常用的命令汇总
  • GEO营销:AI时代的搜索优化新赛道——从DeepSeek爆火看生成式引擎优化的崛起
  • Elasticsearch 重命名索引
  • LVS 集群技术实践:NAT 与 DR 模式的配置与对比
  • 牛客-倒置字符串
  • Go语言中的类型转换与类型推断解析
  • 用 Numpy 手动实现矩阵卷积运算
  • 我们使用 Blender 和 Godot 的工作流程
  • 从车险理赔到快递签收:打通区块链与现实世界的“最后一公里”——解密预言机(Oracle)
  • 【Linux服务器】-mysql数据库数据目录迁移
  • Linux系统环境下 Node.js 20 安装实践:glibc 2.17 兼容方案与工具链优化
  • 正向代理与反向代理理解
  • 零基础学后端-PHP语言(第一期-PHP环境配置)
  • Libevent(3)之使用教程(2)创建事件
  • Kafka——Java生产者是如何管理TCP连接的?
  • Python day18
  • lvs原理及实战部署
  • HOT100——动态规划篇Leetcode221. 最大正方形