21-可移植性
13.5.3 可移植性
理论上, fseek() 和 ftell() 应该符合UNIX模型。但是,不同系统存在着差异,有时确实无法做到与UNIX模型一致。因此,ANSI对这些函数降低了要求。下面是一些限制。
- 在二进制模式中,实现不必支持
SEEK_END模式。因此无法保证程序清单13.4的可移植性。移植性更高的方法是逐字节读取整个文件直到文件末尾。C预处理器的条件编译指令(第16章介绍)提供了一种系统方法来处理这种情况。 - 在文本模式中,只有以下调用能保证其相应的行为。
| 函数调用 | 效果 |
| :----- | :----- | :----- | :----- |
| fseek(file, 0L, SEEK_SET) | 定位至文件开始处 |
| fseek(file, 0L, SEEK_CUR) | 保持当前位置不动 |
| fseek(file, 0L, SEEK_END) | 定位至文件结尾 |
| fseek(file,ftell-pos, SEEK_SET) | 到距文件开始处 ftell-pos 的位置, | ftell-pos 是 ftell() 的返回值 |
不过,许多常见的环境都支持更多的行为。