【发布时间】:2016-03-31 10:43:40
【问题描述】:
虽然我知道fpos_t 是一种不透明类型,旨在由fgetpos() 函数初始化,但C99 rationale 的§7.19.9.1 指出:
fgetpos和fsetpos被添加到 C89 以允许对太大而无法使用fseek和ftell处理的文件进行随机访问操作。
和§7.19.9.2:
需要在
long值中对记录位置和记录中的位置进行编码可能会限制文本文件的大小,在该文本文件上可以使用fseek和ftell大大小于二进制文件的大小....
添加了
fgetpos和fsetpos来处理因fseek和ftell而无法处理的文件。
这似乎主要关注文本文件(使用mode 打开的文件不包括b 标志),因为某些实现可能需要存储两个位置(文件记录位置和记录字符位置),这可能会显着减少文本流的fseek()和ftell()函数的有效范围。
尽管如此,我不知道这对文本流特别有用,而且我当然不明白它如何有效地用于“随机访问”。
似乎真正使用这些函数的唯一方法是读取文件的每个字符并缓存它们的 fgetpos()d fpos_t 值,这似乎充其量只是小众,因为你几乎肯定不想在任何地方阅读靠近LONG_MAX 个字符。
“委员会”在想什么?有 C99 的基本原理吗?
【问题讨论】: