2_文件IO

news/2024/11/24 13:34:26/

目录

    • 一、概念⭐⭐
    • 二、特点⭐⭐⭐
    • 三、函数⭐⭐⭐⭐
      • 3.1 打开文件 open
      • 3.2 关闭文件 close
      • 3.3 读写操作
      • 3.4 定位操作 lseek
    • 四、文件IO与标准IO的对比

在C语言的标准IO库中的库函数,如fclose、fopen,、fread、fwrite,提供的是高层服务;而Linux的文件I/O调用提供的是底层的服务,底层的服务不提供缓冲而直接进入操作系统。标准I/O库中的高层服务归根到底还是要调用Linux所提供的底层服务。

一、概念⭐⭐

  • 系统中定义的一组用于输入输出的函数接口(注意和标准IO概念上的区别🚨👉标准IO是在C库中定义的一组用于输入输出的函数接口)

二、特点⭐⭐⭐

  • 1)没有缓冲机制,每次调用都会引起系统调用
  • 2)围绕文件描述符进行操作,文件描述符是非负整数(>=0)依次分配
  • 3)默认打开三个文件描述符0(标准输入),1(标准输出),2(标准错误)
  • 4)可以操作任意类型文件,目录文件除外

三、函数⭐⭐⭐⭐

3.1 打开文件 open

  • *int open(const char pathname, int flags);

  • 功能:打开文件

  • 参数:

    • pathname:文件名或包含路径的文件名

    • flags:打开文件的方式

      • O_RDONLY:只读
      • O_WRONLY:只写
      • O_RDWR:可读可写
      • O_CREAT:创建
      • O_TRUNC:清空
      • O_APPEND:追加
  • 返回值

    • 成功:文件描述符
    • 失败:-1
  • 当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限

  • *int open(const char pathname, int flags, mode_t mode);
    创建出来的文件权限为指定权限值&(~umask) //umask为文件权限掩码

  • 标准IO文件打开权限与
    文件IO文件打开权限对比

    • pC9TAMR.png

3.2 关闭文件 close

  • int close(int fd);

  • 功能:关闭文件

  • 参数:fd:文件描述符

  • 返回值:

    • 成功:0
    • 失败:-1

3.3 读写操作

  • read

    • *ssize_t read(int fd, void buf, size_t count);

    • 功能:从一个已打开的可读文件中读取数据

    • 参数

      • fd 文件描述符
      • buf 输入缓冲区指针
      • count 要读入的字节数
    • 返回值

      • 成功:实际读到的字节数
      • 返回0:表示读到文件结尾
      • 返回-1:表示出错,并设置errno号
  • write

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

    • 功能:向指定文件描述符中,写入 count个字节的数据。

    • 参数

      • fd 文件描述符
      • buf 要写的内容
      • count 要写入的字节数
    • 返回值

      • 成功:实际写入的字节数
      • 失败 : -1
      • 没有数据要写:0
    • pC9TEs1.md.png
  • 练习:实现Linux下的cp命令

    • pC9TeZ6.png

3.4 定位操作 lseek

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

  • 功能:设定文件的偏移位置

  • 参数

    • fd:文件描述符

    • offset偏移量

      • 正数:向文件结尾位置移动
      • 负数:向文件开始位置
    • whence 相对位置

      • SEEK_SET 开始位置
      • SEEK_CUR 当前位置
      • SEEK_END 结尾位置
  • 返回值

    • 成功:文件的当前位置
    • 失败:-1

四、文件IO与标准IO的对比

pC9TgoT.png


http://www.ppmy.cn/news/210127.html

相关文章

计算机硬盘使用寿命,固态硬盘寿命有多长 固态硬盘的使用寿命【详解】

固态硬盘的寿命有多长? 固态硬盘如今超级本与一些较为主流的电脑中随处可见,固态硬盘除了在正常的使用中带来更快速度的体验外,还具有零噪音、不怕震动、低功耗等优点,但也有不少消费者对于固态硬盘的寿命感到担忧,那么固态硬盘的…

小新air 13 pro更换固态硬盘

小新air 13 pro更换固态硬盘 一、起因二、选购硬盘三、曲折的安装3.13.23.33.43.5 四、后记后续(2021年1月31日) 一、起因 我有一个朋友,16年的时候购买了联想小新air 13 pro,256G版本。4年多过去了,256G捉襟见肘&…

台式机机械硬盘掉盘问题分析和处理

前段时间,遇到台式机掉硬盘的情况,处理测试了好几次,最后终于解决了问题,在此记录测试过程和结果。 一、电脑情况 系统:Windows10企业版LTSC 硬盘:120G固态500机械,固态为系统盘,…

不用重做系统,教你如何把机械硬盘上面的系统迁移到固态硬盘!

迁移系统到固态硬盘日记: 当原机械硬盘里有系统,而且里面有重要的数据等,此时如何不用重做系统,把机械硬盘上面的系统迁移到固态硬盘上,方法教程如下: 第一步: 首先把自己准备的固态硬盘先装在…

联想y7000/r7000 2020款加装固态硬盘及硬盘分区,硬盘测速方法

首先R7000和Y7000 (2020款) 内存支持替换32G2,最大64G内存 (出厂内存均为3200MHz,英特尔平台默认仅支持2933运行频率) 硬盘能加装机械硬盘最大1TB SATA3.0 2.5英寸 7mm HDD 或者加装固态硬盘1TB M.2 PCIE 2280 SSD 不确定的话最好…

固态硬盘寿命测试一年半 寿命指数超乎想象 连写2500TB终于全挂

固态硬盘可靠性测试:写入22TB数据之后…… SSD固态硬盘相比传统HDD机械硬盘的优点是性能强、体积小、无噪音,但是特殊的工作原理也让它的使用次数有限,而且这个次数还会随着制程工艺的升级而降低,编程/擦写循环次数从之前的5000降…

[SSD综述 1.4] SSD固态硬盘的结构和原理导论

声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 1 什么是SSD 2 SSD的存储介质分类 3 SSD的结构 3.1 主控制器 3.2 存储单元 3.3 闪存的分类 4 Host访问SSD的原…

固态硬盘卡LOGO、掉固件、不认盘、无法高格等故障维修之SM2258XT量产篇

手里有去年给客户换下来的一块现代HYssd 120G SATA的坏硬盘,故障为开机卡LOGO,好容易进PE打开DISKGENIUS就卡死。 通过易驱线插电脑在设备管理器里可以看到硬盘,点磁盘管理,电脑系统呈假死状态,无响应! 准…