文件中的EOF是什么

2023-05-16

1、EOF 定义在 /usr/include/stdio.h 文件中:

    

    从上面 EOF 的定义我们可以看出 EOF 本质上就是一个值为-1的常量!

  2、在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值(也就是-1)。至于系统怎么知道文件的结尾,资料上说是通过比较文件的长度。

  3、fgetc()不仅是遇到文件结尾时返回EOF,而且当发生错误时,也会返回EOF。因此,C语言又提供了feof()函数,用来保证确实是到了文件结尾

    改进前:

复制代码


1   int c;
2 
3   while (!feof(fp)) {
4 
5     c = fgetc(fp);
6 
7     do something;
8 
9   }  

复制代码

    改进后:

复制代码


 1     int c = fgetc(fp);
 2 
 3   while (c != EOF) {
 4 
 5     do something;
 6 
 7     c = fgetc(fp);
 8 
 9   }
10 
11   if (feof(fp)) {
12 
13     printf("\n End of file reached.");
14 
15   } else {
16 
17     printf("\n Something went wrong.");
18 
19   }  

复制代码

 

  4、对于普通文本文件

    对于这种文件,Linux 系统判断普通文本文件是否读取到文件末尾的方法是:read 函数会对所打开的文件维护一个读取指针,然后根据这个指针跟文件开始位置的指针值相减得到一个相对于文件开始位置的偏移字节数,最后通过这样一个偏移字节数和文件本身的大小进行一个比较,如果相对于文件开始位置的偏移字节数大于文件本身的大小,那么就返回一个 EOF 常量,说明此时已经读取到文件末尾了。

  5、对于标准输入文件

    inux 系统判断标准输入文件是否读取到文件末尾的方法是:设置一个特殊的输入标记来表示文件末尾,而在Linux 系统中这个标记就是组合键Ctrl+D,当系统捕获到这个组合键时,就让 r read 函数返回一个 EOF 常量,告知程序已经读取到标准文件的末尾了。

  6、对于socket文件

    如果服务端进程关闭了socket连接,那么客户端会接收到服务端发送过来的一个 TCP 协议的 FIN 数据包,然后客户端进程中原本阻塞着等待接收服务端进程数据的 read函数此时就会被唤醒,返回一个值 0。这跟我们前面提到两种文件读到文件末尾返回 EOF(值为-1)的情况有点差别,所以在程序中从 socket 进行读取操作时,判断数据流结束的标志不是 -1 而是 0。

  7、一定要记住这样一个概念:EOF 是一个常量而不是一个字符!

 

转载链接:

https://www.baidu.com/link?url=lLh6REBUqqs1p2guXlVGYU2Coqb3Id-c8zQkINQTIPp6iFo_838yisWYbaWE69Ukq9CsTEL6Jnbi9D-Jchmjcq&wd=&eqid=8b5fb51600002341000000065e9ff251

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件中的EOF是什么 的相关文章

  • ffmpeg av_read_frame返回AVERROR_EOF

    最近在调试的时候总是发现av read frame 返回AVERROR EOF xff0c 但是我这是网络传输rtsp xff0c 怎么会是文件结尾呢 xff0c 网络上搜了一下没结果 xff0c 只能自己看源码了 xff0c 结果发现在t
  • early EOF index-pack failed的解决办法

    git chone时报错如下 xff1a fatal The remote end hung up unexpectedly fatal early EOF fatal index pack failed 网上找了各种办法后 xff0c 又
  • mysql+e+eof_OS + linux crontab / top / ntpdate / nmon

    root 64 app01 crontab l 30 usr sbin ntpdate 192 168 118 201 00 00 nmon nmon x86 rhel54 f N m nmon s 60 c 1440 1 opt IBM
  • Windows 命令提示符中的 EOF 不会终止输入流

    Code include
  • read.csv 警告“带引号的字符串内的 EOF”阻止完整读取文件

    I have CSV 文件 24 1 MB 我无法完全读懂我的 R 会话 当我在电子表格程序中打开该文件时 我可以看到 112 544 行 当我将其读入 R 时read csv我只收到 56 952 行和此警告 cit lt read cs
  • 为什么“while(!feof(file))”总是错误?

    使用有什么问题feof 控制读循环 例如 include
  • Imaplib 中的 EOF 错误

    我正在编写一个 python 小程序 用于监视工作场所电子邮件箱的未读计数 当我在小程序闲置大约 10 分钟后尝试使用任何 imaplib 方法时 遇到了 EOF 错误 一切工作正常 直到小程序存活超过 10 分钟 这是imaplib对象的
  • Java,需要一个while循环才能达到eof。即 while !eof,继续解析

    我目前有一个正在工作的解析器 它解析一次文件 不是我想要的 然后将解析后的数据输出到文件中 我需要它继续解析并附加到同一输出文件 直到输入文件末尾 看起来像这样 try my code parsing the data and append
  • getchar() 不会传递 EOF 并且 Ctrl+Z 不会终止 Cygwin 上的程序

    这是一个简单的程序 计算字符串 符号和单词 使用 Cygwin 进行计算一切正常 但是在启动时 输入值后 程序不会打印nc nw nl并等待输入更多值 改变EOF到 13 Enter 无论如何都没有帮助 ctrl Z is useful t
  • 在C代码中表示EOF?

    换行符表示为 n 在C代码中 是否有与文件结束符 EOF 等效的字符 EOF 不是一个字符 在大多数现代操作系统中 它只是到达流末尾时应用于文件流的一个条件 之所以会出现混乱 是因为用户可能signalEOF 用于通过键入特殊字符进行控制台
  • 为什么 EOF(文件结尾)在行尾没有 '\n' 之前不起作用?

    于是我开始用ANSI C的书来学习C 本书的早期练习之一是编写一个程序 该程序接受文本输入并在新行上打印每个单词 这很简单 所以我做了 include
  • 如何在Python中检查EOF? [复制]

    这个问题在这里已经有答案了 如何在 Python 中检查 EOF 我在代码中发现了一个错误 其中分隔符后的最后一个文本块未添加到返回列表中 或者也许有更好的方式来表达这个功能 这是我的代码 def get text blocks filen
  • C++ cin 和 CTRL + Z 问题

    我正在阅读 C Primer 5th 我在练习中遇到了一些问题 从 cin 读取单词序列并将值存储为向量 后 你已经阅读了所有单词 处理向量并将每个单词更改为 大写 打印转换后的元素 一行八个字 我的代码是这样的 include
  • Java中如何向进程发送EOF?

    我想跑groff在Java程序中 输入来自字符串 在真实的命令行中 我们将通过以下方式终止输入 D在 Linux Mac 中 那么Java程序中如何发送这个终止符呢 String usage Dd year n Dt test 1 n Os
  • Node.js 多行输入

    我想提示用户输入 让用户输入多行文本 在每行之间按 Enter 键 然后按 CTRL D 或类似的东西终止输入 使用 按键 我可以捕获 EOF 但我必须手动处理所有回显 退格处理 终端转义序列等 如果我可以使用 readline 但以某种方
  • 不使用 EOF 位作为我们的流提取条件的真正原因是什么?

    Inspired by my previous question https stackoverflow com q 14591203 150634 新 C 程序员的一个常见错误是从文件中读取以下内容 std ifstream file f
  • 使用 python pty 伪终端进程发送命令并退出

    使用 python pty 模块 我想使用 stdin 函数 如 pty 模块想要的那样 向终端模拟器发送一些命令 然后强制退出 我想到了类似的事情 import pty cmnds exit n ls al n Command to se
  • 使用 \Z 与 \z 作为扫描仪分隔符的行为

    编辑 我找到了答案 但由于新用户的限制 我无法回答这个问题 不管怎样 这是 Java 中的一个已知错误 http bugs java com bugdatabase view bug do bug id 8028387 http bugs
  • ifstream 不读取 EOF 字符

    我正在创建一个程序 在 C 中 该程序采用 ASCII 文件并从每一行读取一些值 直到到达文件末尾 我在用ifstream读取文件 当我使用ifstream eof 方法 然而 这一次 即使它在我的测试用例中找到了 eof 字符 当我分析其
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too

随机推荐

  • 谷歌浏览器如何打开标签时不覆盖原标签

    1 中键 鼠标滑轮 点击链接 2 Ctrl 43 左键单击 3 鼠标指针移至标签右击 xff0c 选择在新标签页中打开 转载地址 https www baidu com link url 61 UJZqjGzit7S3FRoiTmbLeJq
  • Vbox安装manjaro 增强功能 无法加载 无法全屏 分辨率 (已解决)

    linux操作系统具有天生的优势 今天被推荐看中了manjaro发行版 于是乎在Vbox里安装试了一下 中间填了的坑在下 1 Vbox窗口太小 操作系统无法全屏 这个问题百度了下 主要是安装增强功能 win版Vbox的安装目录里有一个叫做V
  • vmware安装deepin系统一直卡在黑屏(已解决)

    我与到了这样的情况 在vmware里安装的deepin15 一致卡在黑屏界面 解决办法如下 deepin属于dedian系的系统 在vmware选择系统类型的时候 选择同属于debian系的ubantu就行了 还要注意待安装的系统是32还是
  • arch linux设置网络

    转载地址 https www baidu com link url 61 ItEG8p9JBhXBaRapfZwvJHqvLviMk7 xfiQRuPA5eqeE5l8y BOc48YHjeL1pvfyHxl8C5KyEgvMzZZvpJW
  • 第一次配置Arch经历的的步骤

    在安装基本操作系统之前 我们处于arch安装引导的环境里 而不是arch里 本篇采用efi 43 gpt启动 在安装之前先查看自己的电脑是否支持efi模式 怎么查看详情转这个链接 目录 在安装基本操作系统之前 我们处于arch安装引导的环境
  • FL Studio21中文版本下载及语言切换调整

    FL Studio21是一个很好的音乐制作软件 此外 xff0c 如果你使用接口软件制作音乐 xff0c 这是非常简单和有效的使用 这将有助于你的工作变得井井有条 此外 xff0c 它还将为您提供一个集成的开发环境 而且 xff0c 这个软
  • Vim的三种模式以及基本操作

    基本上 vi vim 共分为三种模式 xff0c 分别是命令模式 xff08 Command mode xff09 xff0c 输入模式 xff08 Insert mode xff09 和底线命令模式 xff08 Last line mod
  • java的内部类的理解之一

    A类不能在A类里面创建对象 如果A是B的内部类 则A类可以在A的外部 B的内部创建对象 目录 一 内部类基础 1 成员内部类 2 局部内部类 3 匿名内部类 4 静态内部类 二 深入理解内部类 1 为什么成员内部类可以无条件访问外部类的成员
  • python内部类的理解

    案例一 class parent def init self self name 61 34 parent 34 def getName self print self name class child def init self self
  • java内部类的理解之二

    内部类Inner Class 将相关的类组织在一起 xff0c 从而降低了命名空间的混乱 一个内部类可以定义在另一个类里 xff0c 可以定义在函数里 xff0c 甚至可以作为一个表达式的一部分 Java中的内部类共分为四种 xff1a 静
  • java内部类的理解之四

    内部类是指在一个外部类的内部再定义一个类 类名不需要和文件夹相同 内部类可以是静态static的 xff0c 也可用public xff0c default xff0c protected和private修饰 xff08 而外部顶级类即类名
  • java内部类的理解之三

    java中的内部类总结 内部类不是很好理解 xff0c 但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑 肢体 器官等身体结果组成 xff0c 而内部类相当于其中的某个器官之一 xff0c 例如心脏 xff1a 它也有自己的
  • c++语言基础知识总结

    目录 一 程序书写tips 二 multi sources处理 三 关键字 四 输入流和输出流 1 输出 2 输入 五 数据类型 1 简单数据类型 1 常量 2 转义字符 2 容器数据类型 1 枚举 2 字符串 3 数组 4 指针 5 引用
  • 一些有用的在线帮助文档(微软,C/C++,Java,linux)

    linux 系统调用和 函数库 你点2 和 3 http www kernel org doc man pages 微软全家桶的帮助Doc http msdn microsoft com en us library ms123401 asp
  • C语言基础知识总结

    目录 一 程序书写tips 二 multi sources处理 请看这篇文章 三 关键字 四 输入流和输出流 1 输出 2 输入 五 数据类型 1 简单数据类型 2 容器数据类型 1 数组 2 字符串 2 枚举 3 指针 3 结构体 4 位
  • 彻底解决VS的4996警告

    方法一 xff1a 使用安全的函数替换老的函数 方法二 xff1a 屏蔽警告信息 1 在文件最前面加上 pragma warning disable 4996 2 在头文件里定义下面的宏 xff1a define CRT SECURE NO
  • easyrecovery免费版2023最新电脑数据恢复软件

    通常 xff0c 许多人会将工作或生活中的数据存储在我们的计算机上 很多时候 xff0c 由于我们的误操作或其他一些问题 xff0c 很容易错误地删除一些文件和数据 特别是 xff0c 一些计算机故障总是会导致数据丢失 xff0c 这是非常
  • C语言fread和fwrite

    对文件格式化读写函数 fprintf 与 fscanf 而言 xff0c 尽管它可以从磁盘文件中读写任何类型的文件 xff0c 即读写的文件类型可以是文本文件 二进制文件 xff0c 也可以是其他形式的文件 但是 xff0c 对二进制文件的
  • C语言文件定位函数rewind和fseek

    文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个 xff0c 即 rewind 和 fseek rewind 用来将位置指针移动到文件开头 xff0c 前面已经多次使用过 xff0c 它的原型为 xff1a voi
  • 文件中的EOF是什么

    1 EOF 定义在 usr include stdio h 文件中 xff1a 从上面 EOF 的定义我们可以看出 EOF 本质上就是一个值为 1的常量 xff01 2 在Linux系统之中 xff0c EOF根本不是一个字符 xff0c