問題起因:
之前代碼中要把數據寫入文件,存在數據更新的情況,原來用的都是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即可