閱讀65 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 分布式日誌收集係統Apache Flume的設計介紹
  下一篇:go unity 腳本中的一些attribute