32位linux系統對檔案大小有個限制,最大只能達到2^31 - 1位元組,也就是2g,即使檔案系統支援更大的4000g的檔案.具體為啥有這個限制我也說不清.只是在做乙個資料庫的tpc-h測試時發現的.上網找了幾個資料,彙總一下大檔案的解決之道.
對於用c語言的api開啟的檔案,也就是用fopen(const char *filename, int mode)方式開啟的檔案,只需要在編譯時加入乙個引數,告訴系統在檔案內部使用64位的偏移位址就行了:-d_use_file_offset_bits=64,原有程式不需要做任何改動,保持程式的可移植性.
另外,也可以使用linux自己的庫函式進行檔案操作:open(const char *filename, int flags, int mode)或者open(const char *filename, int flags)開啟檔案.只是其中的flags引數需要多加乙個o_largefile.如下所示:
然而,對於o_largefile的引用卻來的很不方便,在加入所有必需的標頭檔案fcntl.h, sys/stat.h, sys/types.h等等後,還會被編譯器提示o_largefile沒有定義.這時,需要使用下面的方法使o_largefile變的有意義:
1#define
__use_largefile64
2#include
<
fcntl.h
>3//
其它標頭檔案,等等45
intfp
=open(
"myfile
", o_trunc
|o_creat
|o_rdwr
|o_largefile,
644);
6
Linux刪除大檔案rm rf的問題
請幾天,我刪除系統彙總的大檔案,大約100g左右,當我使用rm rf x.log刪除後,使用df h發現空間並未釋放。一開始以為是由於磁碟虛擬掛載,導致我刪除的檔案並不是當前目錄的檔案。但後來發現並不是。我在網路上搜尋發現都是 要 lsof grep delete kill 9 但是我覺得這樣不安全...
linux建立大檔案
正常32位機器開啟大於2g的檔案會報錯,解決辦法 一 定義巨集 定義巨集,使得可以處理大檔案 4gb undef file offset bits define file offset bits 64 include 二 在makefile編譯選項裡加上 d file offset bits 64 ...
linux 分割大檔案
你曾經是否想要把乙個大檔案分割成多個小檔案?比如乙個5gb日誌檔案,我們需要把它分成多個小檔案,這樣我們才有可能使用普通的文字編輯器讀取它。有時我們需要傳輸20gb的大檔案到另一台伺服器,這就需要我們把它分割成多個檔案,這樣便於傳輸資料。下面我們來通過五個例項來講解它。split命令分割檔案成每個檔...