jni對超過2G的大檔案的處理,不過不成功

2021-06-26 07:46:55 字數 691 閱讀 1575

加密乙個檔案,加密演算法使用的是android自帶的aes演算法,從原始碼中提取出來即可。

希望將加密和檔案處理的模組封裝在so中,前前後後耗時不少,總算完成,加密流程不在這裡闡述。這裡記錄下當時出現的乙個問題。

具體原因出現在fseek函式中,超過2g的檔案的話,使用fseek來定位到end,必定是返回-1的失敗值。問題就出在這裡。

大檔案處理

裡面有介紹。

事實上在實驗fseeko的時候,仍然會出現該問題,fseeko函式裡面的偏移量引數是型別off_t預設仍然是32bit,和int一樣,所以實際上fseeko的效果和fseek是一樣的,所以這裡我們主要要做的事情就是將off_t設定為64位。修改方法:

直接在 .cpp中定義 #define _file_offset_bits 64 恩,是木有用的,網上到處在介紹這種說法,但是直接再jni**中這樣設定,完全木有作用。感覺是肯定在android.mk中進行配置才可以。

在android.mk中新增了 local_cflags += -d_file_offset_bits=64

仍然沒有用。fseeko執行還是無法定位到超過2g的位址。

不知如何解決.................

原因找到了,為什麼以上修改方法木有用呢?因為:

android不支援64位off_set

好吧,那麼,要用lseek64的話,又要修改**,算了,放棄。

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 新準...

Linux C 讀寫超過2G的大檔案 注意事項

在專案中做大檔案的增量讀寫,遇到了問題 fopen value too large for defined data type.習慣性地根據這個提示查閱的有關資料顯示 1 工具鏈太老了 海思的工具鏈我目前找不到更換的方法,也為了穩定性,不再增加新的ulibc庫 2 檔案系統的 inde是 64位的 ...

獲取檔案大小,尤其是超過2G的大檔案

define file offset bits 64 include include include long long get file size const char filename return long long buf.st size long long ftell test const...