Linux C 下的大文件操作
這裏說的大文件指大小超過4G的文件。
在32位環境下,linux默認打開、讀、寫超過4G的文件會返回錯誤。定義如下宏可以突破這個限製,對read/write和fread/fwrite同時有效。
注意它必須定義在所有頭文件之前。
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
或者在編譯時添加如下參數:
-D_FILE_OFFSET_BITS=64-D_LARGEFILE_SOURCE
或者使用函數fopen64,但是該函數我的測試機上沒有找到相關的說明,所以在我這裏不可用。
_FILE_OFFSET_BITS的定義簡單來說就是在32位機器上,使用64位的變量空間,長度增加了一倍。新的int就相當於原來的long int,這樣就可以控製大於4G的文件了。
在大文件打開後,即可使用文件操作函數為所欲為了。
比較高級的用法:
Mmap方式,即內存映射的方法,簡單說就是將文件分成片段,然後逐片的讀到內存中並操作。
優點是性能很好,處理大文件的速度很快。
缺點是需要進程鎖來鎖住進程,並且需要保留每次操作的位置,用來下一次的操作。實現起來比較複雜,感興趣的同學可以參考:
https://www.libing.net.cn/read.php/1252.htm
https://hi.baidu.com/vcprogrammer/blog/item/da863f4ff5533137aec3abec.html
最後更新:2017-04-03 12:54:31