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

linux的文件IO操作---read函数如何退出

关于  read  函数和 EOF(End Of File)的概念。
1. EOF 的定义:

        EOF 是一个信号,表示文件的末尾已经被到达,没有更多的数据可以读取。在 Unix 和 Linux 系统中,EOF 通常与文件的结束关联,但也可以与管道或网络连接的关闭关联。
2.  read  函数的行为:
        当  read  函数被调用,并且文件描述符指向的文件还有数据可读时, read  会读取数据并返回实际读取的字节数。
        如果文件描述符指向的文件没有数据可读,且文件描述符设置为阻塞模式, read  函数会阻塞调用进程,直到有数据可读或者文件被关闭。
        当文件被关闭或者到达文件末尾时, read  函数会返回0,这表示 EOF。这意味着没有更多的数据可以读取。
3. EOF 的触发条件:
        文件末尾:对于普通文件,当  read  到达文件的末尾时,会返回0,表示 EOF。
        文件关闭:对于管道或套接字,当对方关闭连接时, read  也会返回0,表示 EOF。
        特殊文件:对于特殊文件(如终端),EOF 可能由用户输入特定的字符组合(如 Ctrl+D)来触发。
4. 阻塞与非阻塞:
        阻塞模式:在阻塞模式下,如果  read  没有数据可读,它会等待直到有数据可读或者 EOF 条件满足。
        非阻塞模式:在非阻塞模式下,如果  read  没有数据可读,它会立即返回  -1 ,并设置  errno  为  EAGAIN  或  EWOULDBLOCK 。
        “没有数据就会发送EOF”,这并不完全准确。EOF 是在文件末尾或者文件被关闭时发送的,而不是仅仅因为没有数据可读。在阻塞模式下, read  会等待直到有数据可读或者 EOF 条件满足,而不是仅仅因为没有数据就返回 EOF

read  函数触发 EOF 的情况可以总结如下:
1. 普通文件:
        当  read  函数从普通文件中读取数据,到达文件末尾时,没有更多的数据可以读取, read  函数会返回0,表示 EOF。
2. 管道和套接字:
        对于管道(pipe)和套接字(socket), read  函数的行为与普通文件有所不同。在这些情况下, read  函数的 EOF 信号通常与对方关闭写端(write end)相关联。
        当管道的写端被关闭,且写端没有更多的数据可供读取时,读端(read end)的  read  函数会返回0,表示 EOF。
        对于套接字,当对方关闭连接或者连接被远程主机正常关闭时, read  函数也会返回0,表示 EOF。
        这两种情况都会导致  read  函数返回0,但原因不同:
        对于普通文件,返回0是因为到达了文件的物理末尾
        对于管道和套接字,返回0是因为通信的另一端已经关闭,没有更多的数据可以读取。
        这种设计允许程序通过检查  read  函数的返回值来判断是否已经到达数据流的末尾,无论是因为文件结束还是因为通信的另一端关闭。


http://www.kler.cn/a/378942.html

相关文章:

  • CentOS 7 安装 ntp,自动校准系统时间
  • QEMU学习之路(4)— Xilinx开源项目systemctlm-cosim-demo安装与使用
  • 气象大模型学习笔记
  • 深入理解 Spring Boot 中的 @PathVariable 注解
  • HTML 框架
  • openEuler 系统中 Samba 文件共享服务器管理(windows、linux文件共享操作方法)
  • 使用Mac如何才能提高OCR与翻译的效率
  • SpringBoot技术栈:在线试题库系统深度开发
  • ElastricSearch 原理以及简单实用(超级通俗)
  • 5、reactive
  • 【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载
  • el-table滚动下拉数据显示不全
  • web安全测试渗透案例知识点总结(上)——小白入狱
  • 国家级汽车检测中心联合开源网安打造安全解决方案,提升行业安全检测水平
  • Android 蓝牙各版本差异
  • python 获取鼠标点击的实时位置案例
  • C/C++学习(3)
  • Spring工厂方式实现实例化bean有哪些方式?
  • Java项目实战II基于spring boot的个人博客系统的设计与实现(开发文档+数据库+源码)
  • 语言模型从0训练流程
  • 数据结构之双链表——考研笔记
  • C++对象优化4条原则
  • 【hacker送书第14期】AI训练师算法与模型训练从入门到精通
  • SpringMvc参数传递
  • js实现blob类型转化为excel文件
  • AI大模型时代,程序员如何保持竞争力