是' ftell()'读取更多字符时,返回值保证更大?

时间:2012-12-22 18:15:04

标签: c gcc ftell

据我所知,仔细阅读了cplusplus.com的C库引用后的内容 “对于文本流,数值 [由ftell()] 返回可能没有意义

我的问题是:这是否意味着我不能绝对确保当我读取3000个字符时返回的值将大于仅返回3个字符时返回的值被读过了?

提前致谢,

JoãoSilva。

3 个答案:

答案 0 :(得分:3)

来自C标准:

  

7.21.9.4 ftell功能
  概要
  #include <stdio.h>
  long int ftell(FILE *stream);
  描述
  ftell函数获取流的文件位置指示符的当前值   流指出。对于二进制流,该值是来自的字符数   文件的开头。 对于文本流,其文件位置指示符包含未指定的内容   fseek函数可用于返回文件位置指示符的信息   在ftell电话时流到其位置;两个这样的区别   返回值不一定是写入字符数的有意义的度量   或阅读。

(强调我的)

我认为这很清楚,但如果没有,请发表评论。

答案 1 :(得分:0)

是。如果ftell()的数值没有意义,那么两个这样的值之间的关系也没有意义。据推测,库文档的措辞允许使用某种形式的内部记录的文件系统,这些记录可能没有按递增顺序编号。

OTOH,我还没有看到一个系统,其值不是从文件开始的字节偏移量。在某些系统*(如Windows和DOS)上,可以调整双字符行结尾。

答案 2 :(得分:0)

没有。这意味着,例如当文件末尾位于文件末尾时,ftell 为文本流返回的值可能不是文件中的实际字节数。这是由于不同的行结束约定以及如何在输入上处理这些约定。所以从本质上讲,你不应该使用ftell值进行数学运算,比如将它们相互减去,甚至不要减去0,以期计算从文件开头到当前位置的字节数。 / p>

这意味着返回的值仅适用于将文件位置指示符重新定位到获得的相同位置。