Read()返回值和EOF

时间:2018-10-19 08:53:43

标签: c

我看到EOF定义为:

#define EOF (-1)

那么为什么读取返回值是:

  

返回值:        如果成功,则返回实际读取的字节数。读取文件结尾后,        返回零。否则,返回-1并将全局变量errno设置为        指出错误。

为什么在读取文件末尾时不返回-1?

2 个答案:

答案 0 :(得分:1)

EOF由标准C在<stdio.h>中定义,并由使用标准I / O流(FILE *)的函数使用。

诸如read()之类的功能是POSIX的一部分,并在<unistd.h>标头中声明。它们与标准I / O流无关,根本不使用EOF

答案 1 :(得分:0)

EOF宏与从文件或标准输入中读取单个字符并将其作为返回值返回的函数一起使用(例如,getchar()fgetc())。如果输入为空,则此类函数将返回EOF而不是一个字符,以告诉您无法读取任何字符。

您提到了read()函数,该函数将一系列字符读取到指定为参数的缓冲区中。在这种情况下,不需要EOF值,因为此函数返回读取的字符数。