文件中的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是什么 的相关文章

  • 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
  • Linux ssh:handshake failed:EOF

    一 前沿 1 Notes xff1a 以下操作均在 京东云服务器 2 在配置好免密登陆之后 xff0c 通过ssh登陆的时候间接性的遇见 ssh handshake failed EOF 真是让人恼火 xff0c 所以给总结一下 二 解决步
  • Android下打印出现read: Unexpected EOF!分析

    背景 xff1a 在抓SmePlayer打印时 xff0c 打开debug级别后 xff0c xshell终端就嘟嘟响然后打印出几百行后就打出read Unexpected EOF 结束了 这时候完全没有抓到我需要的打印 xff0c 用lo
  • 如何判断文件是否读到文件结尾

    二进制文件 头文件 include define feof stream stream gt flag IOEOF feof 函数用来检测当前文件流上的文件结束标识 判断是否读到了文件结尾 其原型为 int feof FILE stream
  • Windows 命令提示符中的 EOF 不会终止输入流

    Code include
  • 我们可以自己写一个EOF字符吗?

    大多数语言 例如 C 在写入文件时都会放置一个 EOF 字符 即使我们错过了编写如下语句 文件流 关闭 但是有没有办法 我们可以根据我们的要求来放置EOF字符 例如在C 中 或者除了使用 C 中提供的函数之外我们还可以使用任何其他方法 如果
  • std::getline 在遇到 eof 时抛出

    std getline当它得到一个时抛出异常eof 我就是这样做的 std ifstream stream stream exceptions std ifstream failbit std ifstream badbit try str
  • Imaplib 中的 EOF 错误

    我正在编写一个 python 小程序 用于监视工作场所电子邮件箱的未读计数 当我在小程序闲置大约 10 分钟后尝试使用任何 imaplib 方法时 遇到了 EOF 错误 一切工作正常 直到小程序存活超过 10 分钟 这是imaplib对象的
  • 如何在 C 中刺激 EOF 而不需要前面的换行符

    假设我有以下 C 代码 int getLine char line int c i 0 while c getchar EOF line i c line i c return i gt gt Enter 007 gt gt Z gt gt
  • 在C代码中表示EOF?

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

    我已经浏览了很多关于 SO 的帖子 但仍然无法解决这个问题 我必须阅读 text模式1模式2 从标准输入来看 有很多text and patterns Code string t p1 p2 while getline cin t cin
  • 如何通过只输入一个EOF来结束scanf

    我遇到了这个问题 我正在使用 while 循环来扫描数字字符串 需要结束扫描并开始继续程序的其余部分 我只是不知道如何刷新标准输入或做任何事情而不按 Ctrl D 两次 我只需要发送 EOF 一次来告诉我的循环结束 while feof s
  • while ((c = getchar()) != EOF) 不终止

    我一直在阅读 C 编程语言 并且了解了输入和输出的这一部分 I ve read other threads saying that the console doesn t recognize enter as EOF So that I s
  • 对 C++ Primer 示例中的控制流执行感到困惑

    我正在阅读 C Primer 第五版 在1 4 4节中 有以下示例 include
  • 不使用 EOF 位作为我们的流提取条件的真正原因是什么?

    Inspired by my previous question https stackoverflow com q 14591203 150634 新 C 程序员的一个常见错误是从文件中读取以下内容 std ifstream file f
  • 在 Windows 7 上遇到 EOF 问题

    I m currently learning C with K R and I m having a hard time sending EOF simulation through cmd I was trying Ctrl Z whic
  • ifstream 不读取 EOF 字符

    我正在创建一个程序 在 C 中 该程序采用 ASCII 文件并从每一行读取一些值 直到到达文件末尾 我在用ifstream读取文件 当我使用ifstream eof 方法 然而 这一次 即使它在我的测试用例中找到了 eof 字符 当我分析其
  • EOF 符号常量

    From C 编程语言 int c while c getchar EOF putchar c 解决办法是getchar当没有更多输入时 返回一个独特的值 该值不能与任何真实字符混淆 这个值称为EOF 表示 文件结束 我们必须声明c是一个足
  • 与 System.in.read() 一起使用的文件结尾/流键盘组合是什么

    如果这个小问题已经得到解答 我深表歉意 我无法在SO找到它 使用以下 Java 简单代码从 IDE 控制台读取行 Windows 7 和 Eclipse Kepler int v try while v System in read 1 S
  • 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