lua 5.1 for windows系统提供的io库,并不支持64位操作。听说lua 5.2已经修复过了Stackoverflow,lua 5.1 for macos没有遇到这个问题。
对于一般的文件,32bit也是完全够用的。可是如果要操作硬盘/镜像,超过4G是家常便饭
。
后来看到了nixio,这个库主要是跨平台封装,里面有Large File的模块。
这个库很久没有人维护,不知道是不是没有经过仔细的测试,当我费了好大劲把file相关剥离出来,发现了好多的问题:
- 文档说是支持大文件,其实没有使用64位
- read的实现跟预期不一样,没有对中断做处理
- 无缓冲算不算一个bug?
- seek和tell的返回值完全是错的
其实如果不用nixio,自己写c扩展把_ftelli64/_fseeki64等导出来最为方便。但是像他这样metatable注册到lua环境中用起来更自然,
另外原来代码参数检查写的还是蛮不错的。
项目地址在https://github.com/annidy/nixio_file,已经去掉mingw依赖。