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

Linux操作系统应用编程——文件IO

文件描述符

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

        范围:0-1023(共1024个)

        分配原则:最小未被使用原则,而系统默认已经打开的三个文件占用了0、1、2这三个文件描述符,所以先分配3,再4

        与标准IO的区别在于,标准IO操作的是文件流指针FILE*,文件IO操作的是文件描述符,而且这个文件流指针FILE指向一个复杂的结构体,结构体中含有文件描述符

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

操作函数

open

        需包含额外头文件

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

        参数:

                pathname:要打开的文件的文件名

                flags:打开方式

        其中的|为按位或的运算符

                mode:对文件的操作权限,为八进制数,对应的权限,有则为1无则为0

操作权限rwxrwxrwxrw-rw-r--
对应二进制111111111110110100
对应八进制07770664

                然而,就算mode为0777,最后一组rwx也不会完整,因为被创建的文件mode会与掩码值的反码进行位运算,得出一个新的mode值

        返回值:成功则为文件描述符,失败则为-1

        只读方式需要文件存在才可读,所以一开始会报错,创建后成功。由于文件描述符最多为1023,所以打开完文件后要及时关闭,避免造成文件描述符泄漏

close

        需包含头文件

        功能:关闭文件

        参数:文件标识符

write

        需额外包含头文件

        功能:向文件中写入数据

        参数:文件描述符;要写入的数据的首地址;要写入的字节数

        返回值:成功则为实际写入的字节数,失败则为-1

        前面已经说了,012自动占了三个文件标识符位置,所以若要向终端写入数据时,则不需要额外打开,只需要将fd位置改为1即可,而此时终端为输出设备,判断输入输出的对象是内存,从内存中出来为输出,存入内存中是输入

read

        功能:从文件中读取数据

        参数:文件描述符;存储数据的空间首地址;希望读取的字节数

        返回值:成功则为实际读到的字节数,失败则为-1,若是读到文件末尾则为0

实现cat功能

        对于部分大文件,需要反复读取,如果字节数不是缓冲区字节数的整数倍,则会造成越界访问,出现乱码,所以可通过write读写read的返回值

文件定位函数

lseek

        功能:文件读写位置定位

        参数:文件描述符;偏移量(字节);要偏移的相对位置

        返回值:成功则为当前读写位置到文件开头的偏移量,失败则为-1

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

相关文章:

  • Nginx的SSL通配符证书自动续期
  • 精准阻断内网渗透:联软科技终端接入方案如何“锁死”横向移动?
  • MySQL中的查询、索引与事务
  • MySQL三大存储引擎对比:InnoDB vs MyISAM vs MEMORY
  • RuoYi-Cloud 接入 Sentinel 的 3 种限流方式
  • Android 双屏异显技术全解析:从原理到实战的多屏交互方案
  • Ubuntu 20.04 虚拟机安装完整教程:从 VMware 到 VMware Tools
  • 基于.Net Framework4.5 Web API 引用Swagger
  • nginx高性能web服务器实验
  • INTERSPEECH 2025 | 数据堂诚邀您参加MLC-SLM挑战赛暨研讨会
  • JVM安全点轮询汇编函数解析
  • 【个人简单记录】PLT,GOT函数加载机制
  • 海康视觉平台VM创建项目
  • FxSound:为你的音频体验注入专业级享受
  • Android图片加载库Glide深度解析与实践指南
  • 4 种方法将联系人从 iPhone 传输到 realme
  • 用了Cursor AI之后,我的编程效率翻倍了?——一位程序员的真实体验分享
  • 小迪23年-32~40——java简单回顾
  • Dots.ocr:告别复杂多模块架构,1.7B参数单一模型统一处理所有OCR任务22
  • 直播预告|鸿蒙生态中的AI新玩法
  • 09--解密栈与队列:数据结构核心原理
  • 图像分割-动手学计算机视觉9
  • 算法提升-树上问题之(dfs序)
  • WPF的c1FlexGrid的动态列隐藏和动态列名设置
  • 《设计模式之禅》笔记摘录 - 15.观察者模式
  • WMware的安装以及Ubuntu22的安装
  • MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
  • 学习STM32 脉冲计数实验
  • 猫头虎AI分享:Word MCP,让AI具备Word文档操作能力,文档创建、内容添加、格式编辑等AI能力
  • HGDB的分区表实现SQL Server的分区视图