fbpx
维基百科

檔案結尾

檔案結尾(英語:End of File,縮寫為EOF),是作業系統无法从数据源读取更多数据的情形。資料源通常为檔案或串流。

C標準函式庫中,像getchar这样的数据读取函数返回一个与符号(巨集)EOF相等的值来指明文件结束的情况发生,EOF的真实值与不同的平台有关(但通常是-1,比如在glibc[1]),并且不等于任何有效的字符代码。块读取函数返回读取的字节数,如果它小于要求读取的字节数,就会出现一个文件结束符。

EOF字符 编辑

终端的输入通常是不会结束的,除非设备被断开。如果想让终端结束,那么可以输入EOF字符使之结束。文件通常以EOF字符结尾,因此可以通过输入文件使终端的输入结束。由于EOF字符是不可输入的,通常通过输入/dev/null以达到输入EOF的效果。

UNIX和AmigaDOS中,将击键翻译为EOF的过程是由终端的驱动程序完成的,因此应用程序无需将终端和其它输入文件区分开来。Unix平台的驱动程序在行首传送一个传输结束字符Control+D,ASCII编码为为04)来指明文件结束。在AmigaDOS中,驱动程序传送一个Control+\来指明文件结束(而Control+D被用作中断字符)。要向输入流中插入一个真正的Control+D字符,用户需要把一个“引用”命令字符放在它的前面(通常是Control-V英语Synchronous idle,表示下一个字符不作为控制字符,而是按照字面量使用)。

在微软的DOSWindows(以及CP/M和许多DEC操作系统)中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符英语Substitute characterControl+Z,代码26)。一些MS-DOS程序,包括部分微软MS-DOS的shell(COMMAND.COM)和操作系统功能程序(如EDLIN),将文本文档中的Control+Z视为有意义数据的结尾,并且/或者在写入文本文档时将Control-Z添加到文档末尾。这是由于两个原因:

  • 向后兼容CP/M。CP/M的第1版与第2版的文件系统以128字节“块”的倍数记录文件长度,所以当有意义数据在一个“块”的中间结束时,习惯上用Control+Z字符来标记它,此后至块结尾的字节为未利用。而MS-DOS文件系统总会记录文件确切的字节长度,所以在MS-DOS中文件不再必需以Control+Z字符来标记结尾。
  • 它使得应用程序在从终端和文本文档读取数据时得以使用相同的代码。

使用Control-D的来历 编辑

在ANSI X3.27-1969磁带标准中,文件结束是由带标记(英語:tape mark)指明的,它由一个约3.5英寸的间隙和随后的一个字节组成,在九轨磁带中这个字节包含字符13(十六进制),而在七轨磁带中包含字符17(八进制)。[2]带结尾(英語:end-of-tape),通常縮寫為EOT,是由两个带标记指明的。这是在像IBM 360这样的机器上使用的标准。指明快到磁带物理结尾的反射棒也被称为一个EOT标记。

参考 编辑

  1. ^ EOF and Errors (The GNU C Library). (原始内容于2011-12-05) (英语). 
  2. ^ Tape Transfer (Pre-1977): Exchange Media: MARC 21 Specifications for Record Structure, Character Sets, and Exchange Media (Library of Congress). (原始内容于2020-02-23) (英语). 

檔案結尾, 英語, file, 縮寫為eof, 是作業系統无法从数据源读取更多数据的情形, 資料源通常为檔案或串流, 在c標準函式庫中, 像getchar这样的数据读取函数返回一个与符号, 巨集, eof相等的值来指明文件结束的情况发生, eof的真实值与不同的平台有关, 但通常是, 比如在glibc中, 并且不等于任何有效的字符代码, 块读取函数返回读取的字节数, 如果它小于要求读取的字节数, 就会出现一个文件结束符, eof字符, 编辑终端的输入通常是不会结束的, 除非设备被断开, 如果想让终端结束, 那么可以. 檔案結尾 英語 End of File 縮寫為EOF 是作業系統无法从数据源读取更多数据的情形 資料源通常为檔案或串流 在C標準函式庫中 像getchar这样的数据读取函数返回一个与符号 巨集 EOF相等的值来指明文件结束的情况发生 EOF的真实值与不同的平台有关 但通常是 1 比如在glibc中 1 并且不等于任何有效的字符代码 块读取函数返回读取的字节数 如果它小于要求读取的字节数 就会出现一个文件结束符 EOF字符 编辑终端的输入通常是不会结束的 除非设备被断开 如果想让终端结束 那么可以输入EOF字符使之结束 文件通常以EOF字符结尾 因此可以通过输入文件使终端的输入结束 由于EOF字符是不可输入的 通常通过输入 dev null以达到输入EOF的效果 在UNIX和AmigaDOS中 将击键翻译为EOF的过程是由终端的驱动程序完成的 因此应用程序无需将终端和其它输入文件区分开来 Unix平台的驱动程序在行首传送一个传输结束字符 Control D ASCII编码为为04 来指明文件结束 在AmigaDOS中 驱动程序传送一个Control 来指明文件结束 而Control D被用作中断字符 要向输入流中插入一个真正的Control D字符 用户需要把一个 引用 命令字符放在它的前面 通常是Control V 英语 Synchronous idle 表示下一个字符不作为控制字符 而是按照字面量使用 在微软的DOS和Windows 以及CP M和许多DEC操作系统 中 读取数据时终端不会产生EOF 此时 应用程序知道数据源是一个终端 或者其它 字符设备 并将一个已知的保留的字符或序列解释为文件结束的指明 最普遍地说 它是ASCII码中的替换字符 英语 Substitute character Control Z 代码26 一些MS DOS程序 包括部分微软MS DOS的shell COMMAND COM 和操作系统功能程序 如EDLIN 将文本文档中的Control Z视为有意义数据的结尾 并且 或者在写入文本文档时将Control Z添加到文档末尾 这是由于两个原因 向后兼容CP M CP M的第1版与第2版的文件系统以128字节 块 的倍数记录文件长度 所以当有意义数据在一个 块 的中间结束时 习惯上用Control Z字符来标记它 此后至块结尾的字节为未利用 而MS DOS文件系统总会记录文件确切的字节长度 所以在MS DOS中文件不再必需以Control Z字符来标记结尾 它使得应用程序在从终端和文本文档读取数据时得以使用相同的代码 使用Control D的来历 编辑在ANSI X3 27 1969磁带标准中 文件结束是由带标记 英語 tape mark 指明的 它由一个约3 5英寸的间隙和随后的一个字节组成 在九轨磁带中这个字节包含字符13 十六进制 而在七轨磁带中包含字符17 八进制 2 带结尾 英語 end of tape 通常縮寫為EOT 是由两个带标记指明的 这是在像IBM 360这样的机器上使用的标准 指明快到磁带物理结尾的反射棒也被称为一个EOT标记 参考 编辑 EOF and Errors The GNU C Library 原始内容存档于2011 12 05 英语 Tape Transfer Pre 1977 Exchange Media MARC 21 Specifications for Record Structure Character Sets and Exchange Media Library of Congress 原始内容存档于2020 02 23 英语 取自 https zh wikipedia org w index php title 檔案結尾 amp oldid 69453684, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。