问题起因:
之前代码中要把数据写入文件,存在数据更新的情况,原来用的都是unix的read和write函数,更新就使用lseek。为了提高写的效率,打算替换为标准C的fwrite和fseek。由于 fopen的a模式下带有文件不存在自动创建的功能就使用了a模式打开文件,然后在更新的情况下fseek移动文件指针,结果最后发现数据全部被写入了,没有被更新。
理论解释:
https://zh.cppreference.com/w/c/io/fopen 参照该连接的解释:
在附加文件访问模式下,数据被写入到文件尾,而不考虑文件位置指示器的当前位置。
也就是说a模式下,fseek是没有用的。数据会被写入文件尾。
问题解决:
增加了if判断,如果文件存在,就选择 "r+",
不存在就选择 "w" 模式
然后再使用fseek即可