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

文件io ,缓冲区

文件IO:系统调用

Linux内核专门为应用层提供的文件操作方法。

1.打开文件open

2.读、写文件read/write

3.关闭文件close

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

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:清空文件

O_APPEND:追加写

mode:文件读写执行操作权限

rwxrwxrwx

111111111--->0777

r w-rw-r--

110110100 --->0664

返回值:

成功:文件描述符

失败:-1

    文件描述符:操作系统中已打开文件的标识符。小的、非负的整形数据

    范围:0-1023(共1024个)

    分配原则:最小未被使用原则

    系统默认已经打开的三个文件占用了0(标准输入设备),1(标准输出设  备),2标准出错设备)这三个文件描述符

    已打开文件需及时关闭,否则文件描述符使用完时会造成文件描述符泄漏

ssize_t write(int fd, const void *buf, size_t count);

功能:向文件中写入数据

参数:

 fd:文件描述符

buf:要写入的数据的首地址

count:要写入的字节数

返回值:

成功:实际写入的字节数

失败:-1

ssize_tread(int fd, void *buf, size_t count);

功能:从文件中读取数据

参数:

fd:文件描述符

buf:存储数据的空间首地址

count:希望读取的字节数

返回值:

成功:实际读到的字节数

失败:-1

读到文件末末尾:0

2025年8月12日

15:48

off_t lseek(int fd, off_t offset, int whence);

功能:文件读写位置定位

参数:

fd:文件描述符

offset:偏移量(字节)

whence:要偏移的相对位置

SEEK_SET:文件开头位置

SEEK_CUR:文件当前读写位置

SEEK_END:文件末尾

返回值:

成功:返回当前读写位置到文件开头的偏移量

失败:-1

标准IO

1.属于C库函数,移植性强

2.标准IO是系统调用的一次封装,增加了缓冲区,目的是提高数据读写的效率

3.标准IO主要用在对普通文件的操作

文件IO

1.属于系统调用,只能用于Linux操作系统,移植性弱

2.文件IO无缓冲区

3.文件IO主要应用在对硬件的操作上,也可以操作普通文件

2025年8月12日

16:43

缓冲区:

1.行缓冲 1k(1024字节))-----》人家交互界面、终端

      缓冲区被刷新的方法:

  • 程序结束,自动刷新缓冲区
  • 遇到\n刷新
  • fflush()强制刷新
  • 缓冲区满刷新

2.全缓冲 4k(4096字节)-----》文件缓冲区

缓冲区被刷新的方法:

  • 程序结束,自动刷新缓冲区
  • fflush()强制刷新
  • 文件关闭刷新
  • 缓冲区满刷新

3.无缓冲 0k-------》出错信息对应的设备

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

相关文章:

  • 堆排序以及实现
  • 基于多模态大模型的个性化学习路径生成系统研究
  • 【motion】身体动作与面部表情捕捉2:Motion-X++ 论文分析
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)
  • MyBatis 缓存与 Spring 事务相关笔记
  • redis的过期策略和定时器
  • Cloud Computing(云计算)和Sky Computing(天空计算)
  • 地图可视化实践录:显示地理区域图
  • 深层神经网络
  • 测试匠谈 | AI语音合成之大模型性能优化实践
  • 【C#】用队列构建一个对象池管理对象的创建和释放
  • PySpark性能优化与多语言选型讨论
  • 各种 dp 刷题下
  • 人机交互:连接人类与数字世界的桥梁
  • apache+虚拟主机
  • 五、Elasticsearch在Linux的安装部署
  • Rust 项目编译故障排查:从 ‘onnxruntime‘ 链接失败到 ‘#![feature]‘ 工具链不兼容错误
  • 使用reqwest+select实现简单网页爬虫
  • Rust 性能提升“最后一公里”:详解 Profiling 瓶颈定位与优化|得物技术
  • open-webui源码分析1—文件上传
  • Vue接口平台十三——测试记录
  • springboot整合sharding-jdbc 5.5.2 做单库分表
  • 燕山大学计算机网络实验(2025最新)
  • Java调用Vue前端页面生成PDF文件
  • 深入剖析 React 合成事件:透过 onClick 看本质
  • Java 工厂方法模式
  • Flask + Vue.js 物联网数字大屏实现方案
  • 数据分析基本内容(第二十节课内容总结)
  • Rsync自动化备份平台建设实战
  • 【数据分析与挖掘实战】金融风控之贷款违约预测