gpt4 book ai didi

c - EOF 如何在 C 内部工作?

转载 作者:行者123 更新时间:2023-12-03 23:26:46 25 4
gpt4 key购买 nike

如果我的问题听起来很愚蠢,我是 C 的新手,我们知道 EOF是一个等于 -1 的常数,
所以假设我创建了一个新的文本文件并输入了类似 abcd 的内容然后保存文件。我的问题是:
Q1-文本编辑器追加EOF文件内容为abcd-1 , 这是正确的吗?
Q2-如果文件的内容是ab-1cd会发生什么? ?那么是不是库读取函数会认为文件的内容是ab和ingore其余的内容?

最佳答案

Q1-the text editor append EOF to the content of the file as abcd-1, is it correct?


不正确。 EOF 不是存储在您的文件中的东西。它是一种 C 语言结构,表示已读取所有文件内容,并且流位于文件末尾。

Q2-What happen if the content of the file is ab-1cd?


无关紧要。没有可插入文件流的 EOF 字符。
一个文件几乎总是表示为一个字节序列,其中一个字节是一个 8 位单元,可以表示从 0 (0x00) 到 255 (0xFF) 的值。这就是我们所说的原始数据或二进制数据。这些值根据文件的编码被赋予意义。
例如 ASCII encoding表示值65(0x41)代表字符 A , 66 B , 等等。 ASCII 字符集确实有许多控制代码,例如 3 ETX (文本结尾),但这些都是过时的,没有实际的现代意义。
存储在文件系统中的文件具有内在长度,它指示文件中的字节数。因此,“文件结尾”出现在最后一个字节之后,由该长度指示。
有趣的是(来自 Wikipedia ):

Some operating systems such as CP/M tracked file length only in units of disk blocks and used Control-Z to mark the end of the actual text in the file.



那么 EOF 在哪里?参加进来? EOF是一个构造,定义为 -1 的常量,由 <stdio.h> 使用。 API(例如 fread )指示已到达文件结尾。不过你应该记住, fread是对较低级别系统调用接口(interface)的抽象(例如 read )。

On success, the number of bytes read is returned (zero indicates end of file)


让我们考虑一个大小为 3 的 ASCII 文件,其内容为 ABC。 .在十六进制编辑器中,它看起来像这样:
0000    41 42 43                        ABC
现在,我们运行以下代码:
#include <unistd.h>
#include <fnctl.h>

int main(void)
{
int fd = open("ourfile.txt", O_RDONLY);

char c;

read(fd, &c, 1); // returns 1, c gets 'A'
read(fd, &c, 1); // returns 1, c gets 'B'
read(fd, &c, 1); // returns 1, c gets 'C'
read(fd, &c, 1); // returns 0, c is unmodified
}
因此,您会看到文件结尾是一种指示状态,而不是实际数据值。

关于c - EOF 如何在 C 内部工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63005982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com