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

Linux下的软件编程——文件IO

文件IO        ----系统调用

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

1.打开文件        ——open

2.读写文件        ——read \ write

3.关闭文件        ——close

int  open(const char *pathname,int flags,mode_t mode)

(1)功能:打开文件并获得一个文件描述符

(2)参数:pathname:要打开的文件的文件名

                    flags:打开方式

                    mode:文件读写操作权限(当flags中有O_CREAT标志时必须增加mode)0777 0664

(3)返回值:成功:返回一个文件描述符

                        失败:返回-1

文件IO的打开方式:O_RDONLY:只读方式        O_WRONLY :只写方式                                       O_REWR:可读写方式        O_CREAT:创建文件                                                                           O_TRUNC:清空文件          O_APPEND:追加写

" r "  <---->  O_RDONLY        " r+ " <---->  O_RDWR       

" w "  <---->  O_WRONLY | O_CREAT | O_TRUNC,0664       

" w+ "  <---->  O_RDWR | O_CREAT | O_TRUNC,0664

" a "   <---->  O_WRONLY | O_APPEND | O_TRUNC,0664

" a+ "  <---->  O_RDWR | O_APPEND | O_TRUNC,0664

系统默认打开的文件占用0,1,2这三个文件描述符

标准IO                                文件IO

FILE * ——>                        int

stdin(标准输入设备)        0

stdout(标准输出设备)      1

stderr(标准出错设备)       2

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

                     范围:0—1023(总共1024个)

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

                     文件描述符泄露:已打开的文件,使用完时,未及时关闭

int  close(int fd)

功能:关闭文件

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

(1)功能:向文件中写入数据

(2)参数:fd:文件描述符

                    buf:被写入数据的首地址

                    count:写入数据的字节数

(3)返回值:成功:写入的字节数

                        失败:返回-1

size_t  read(int fd,const void *buf,size_t count)

(1)功能:从文件中读数据

(2)参数:fd:文件描述符

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

                    count:希望读取的字节数

(3)返回值:成功:返回实际读到的字节数

                        失败:返回-1

                        读到文件末尾:返回0

文件定位函数:

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

(1)功能:文件读写位置定位

(2)参数:fd:文件描述符

                    offset:偏移量

                    whence:要偏移的相对位置(SEEK_SET,SEEK_CUR,SEEK_END)

(3)返回值:成功:返回当前读写位置到开头的距离

                        失败:返回-1

求文件的大小:

off_t  len = lseek(fd,0,SEEK_END)

lseek(fd,0,SEEK_SET)        —> 文件读写位置复位

标准IO与文件IO的不同点

标准IO:1.属于C库函数,移植性强

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

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

文件IO:1.属于系统调用,只能用于linux操作系统,移植性弱

               2.文件IO无缓冲区

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

缓冲区

1.行缓冲        1k(1024字节)        —>人机交互界面,终端

缓冲区被刷新的方式:(1)程序结束,自动刷新缓冲区(2)遇到\n刷新(3)fflush()强制刷新

                                    (4)缓冲区满刷新    

2.行缓冲        4k(4096字节)        —> 文件缓冲区

缓冲区被刷新的方式:(1)程序结束,自动刷新缓冲区(2)fflush()强制刷新

                                    (3)文件关闭刷新(4)缓冲区满刷新

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

例如:stderr---> 无缓冲

        

     

http://www.dtcms.com/a/327349.html

相关文章:

  • Openlayers基础教程|从前端框架到GIS开发系列课程(24)openlayers结合canva绘制矩形绘制线
  • 循环神经网络
  • THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输
  • 【[特殊字符][特殊字符] 协变与逆变:用“动物收容所”讲清楚 PHP 类型的“灵活继承”】
  • Gradle(二)Gradle的优势、项目结构介绍
  • 电商双11美妆数据分析(一)
  • Honeywell霍尼韦尔A205压力传感器HC41H106P060169419G固瑞克117764美国制造
  • Rust 项目编译故障排查:从 ‘onnxruntime‘ 链接失败到 ‘#![feature]‘ 工具链不兼容错误
  • KAQG:一种用于生成难度可控问题的知识图谱的增强的RAG系统(论文大白话)
  • 2025AI行业升级生态战:谁在“种树”?谁在“造林”?
  • 02-Ansible 基本使用
  • Visual Studio中VC++目录、C/C++和链接器配置的区别与最佳实践
  • Minst手写数字识别
  • python2操作neo4j
  • 非凸科技受邀参加Community Over Code Asia 2025 Rust分论坛
  • 上海AI实验室发布MinerU2:通专融合路线如何补齐AI-Ready数据的最后一公里
  • AutoAgent节点入门:解锁智能体的自主规划能力
  • Myqsl建立库表练习
  • 盲盒抽谷机小程序系统开发:解锁盲盒新玩法,开启潮玩社交新时代
  • 论答题pk小程序软件版权的
  • DeepSeek-R1与RAGflow本地部署全流程指南:从模型下载到个人知识库构建实战
  • 真实案例 | 如何用iFlyCode开发Webpack插件?
  • string 类运算符重载
  • LeetCode Day5 -- 栈、队列、堆
  • JavaScript 实现模块懒加载的几种方式
  • 如何轻松解除Facebook封锁
  • flinksql bug: Received resultset tuples, but no field str
  • 阿里云国际DDoS高防:添加网站配置指南
  • 腾讯codebuddy.ai 安装实测【从零开始开发在线五子棋游戏:完整开发记录】
  • 机械学习--TF-IDF实战--红楼梦数据处理