主要观点:作者在改进 DOS 模拟器时发现 COMMAND.COM 处理文件写入时出现问题,不同编译器在文件读写操作上表现不同,经研究发现 C 库中关于文件读写方向切换的规定由来已久,自 1979 年起基本未变,当前不同操作系统的库在文件读写处理上存在差异,历史源码也显示了这一规定的演变过程。
关键信息:
- COMMAND.COM 处理文件写入的复杂流程及问题。
- 不同编译器(如 Microsoft Visual C++ 6.0、IBM C/C++ 3.6 等)在文件读写上的表现。
- C 库中关于文件读写方向切换的规定及演变(从 1978 年的 K&R 到各版本 ANSI C 等)。
- 不同操作系统(如 Linux、FreeBSD、Microsoft 等)的库在文件读写处理上的差异。
- 历史源码中不同 Unix 版本(如 32V UNIX、V6 UNIX、System III、V7 UNIX、2BSD 等)在文件操作方面的情况。
重要细节: - COMMAND.COM 处理文件时先打开、写入、关闭,再重新打开、回溯、读取、写入、关闭。
- Microsoft 运行时
ferror()
设但errno
为 0,IBM 运行时ferror()
清但errno
为 41 及对应错误含义。 - Linux(glibc)和 FreeBSD 允许自由混合读写,Microsoft 库需在切换读写方向时进行刷新或定位。
- 不同 Unix 版本中
fopen()
的实现及对更新模式的支持情况等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。