linux下操作大於2G檔案

2021-06-22 02:49:11 字數 810 閱讀 1659

1、包含所有標頭檔案以前,先定義這些巨集:

#ifndef __use_file_offset64

#define __use_file_offset64

#endif

#ifndef __use_largefile64

#define __use_largefile64

#endif

#ifndef _largefile64_source

#define _largefile64_source

#endif

2、使用open開啟檔案的時候,加上o_largefile標誌:

read(), write()等與一般的用法一致,無變化。

3、注意lseek()函式,檔案未超過2g的時候,一切工作良好;

檔案超過2g後,呼叫返回-1,errno為eoverflow (errno=75, msg=value too large for defined data type)

需要使用lseek64()代替lseek()。很奇怪,定義了巨集以後,並未自動將lseek變成lseek64。(知道原因的朋友可以教教我)

4、注意stat()函式,傳入的檔案如果在2g內,工作良好;

傳入的檔案如果超過2g,返回-1, errno為eoverflow (errno=75, msg=value too large for defined data type)

應該這樣使用:struct stat64 st; stat64("file", &st);

此外,還可以用fopen64,也要先加上上面3個巨集定義。

具體的可以去看一下fcntl.h這個標頭檔案

C語言操作大於2G的檔案

tips 1.當檔案小於2g時,使用fseek和ftell可以獲取檔案的大小,必須是這兩者搭配。2.當檔案大於4g時,使用 fseeki64和 ftelli64,如果不確定自己操作的檔案大小建議使用 fseeki64和 ftelli64 3.這個兩個函式的引數是一致的,通用。解釋一下為什麼fseek...

關於fseek不能定位大於2G檔案的問題

最近在進行檔案斷點續傳的時候用到了fseek來定位檔案位置,一開始用小檔案測試沒有發現什麼問題,但是用大於2g的檔案測試的時候fseek列印出錯,查相關資料,發現fseek的第二個引數型別是long,也就是說只能定位2g以內的檔案,另外有兩個類似的函式fseeko和fseeko64,fseeko類似...

linux解壓超過2G大檔案

最近資料伺服器出現問題 通過exp命令備份 資料達到14g 壓縮命令 zip r 20130314.zip 20130314.dmp ls l 檢視檔案大小 壓縮zip格式也有3.2g rw r r 1 root root 3826207807 03 28 22 14 20130314.zip 新準...