#define k7zstartheadersize 0x20
#define k7zsignaturesize 6
extern
const byte k7zsignature[k7zsignaturesize];
檔案的開頭處定義了2個巨集,k7zstartheadersize 是7z檔案頭的大小(詳情可見7z檔案格式及其原始碼的分析(三));k7zsignaturesize是7z檔案標誌的大小;k7zsignature是7z檔案標誌(是乙個常量,7zarcin.c中定義了const byte k7zsignature[k7zsignaturesize] = ;)。
typedef
struct
cszdata;
結構體cszdata的第乙個變數是乙個指向常量的指標(data指向位址的內容不可改變,但是data指向的位址是可以改變的),第二個變數是size_t型別的,表示data的大小。
/* cszcoderinfo & cszfolder support only default methods */
typedef struct
cszcoderinfo;
typedef struct
cszbond;
#define sz_num_coders_in_folder_max 4
#define sz_num_bonds_in_folder_max 3
#define sz_num_pack_streams_in_folder_max 4
typedef struct
cszfolder;
先介紹三個巨集的意義,sz_num_coders_in_folder_max表示支援的壓縮演算法種類的最大個數(從原始碼和7z軟體都可以看出,只支援lzma2、lzma、ppmd、bzip2四種壓縮);sz_num_bonds_in_folder_max表示繫結對的最大個數;sz_num_pack_streams_in_folder_max表示打包資料流的最大個數。
cszcoderinfo描述了乙個coder的資訊(coder的解釋見7z檔案格式及其原始碼的分析(四)),propsoffset是屬性的偏移,methodid是壓縮演算法id(id的定義見7zdec.c),numstreams資料流的個數,propssize是屬性大小。
cszbond描述了繫結對的資訊,inindex是輸入索引,outindex是輸出索引。
cszfolder描述了資料夾的資訊,numcoders是coder的個數,numbonds是繫結對的個數,numpackstreams是打包資料流的個數,unpackstream是解包流,packstreams存放的是打包流,bonds存放的是繫結對的資訊,coders存放的是coder的資訊。
typedef
struct
cntfsfiletime;
typedef
struct
cszbitui32s;
typedef
struct
cszbitui64s;
cntfsfiletime表示乙個64位的值(類似於結構體filetime的定義)。
cszbitui32s表示無符號32位數值。
cszbitui64s表示無符號64位數值。
typedef
struct
cszar;
typedef
struct
cszarex;
對於cszar和cszarex每個變數的意義,只能從變數名進行猜測(從作者的注釋可以看到有些變數應該存放的值),對於cszar和cszarex中ar是什麼的簡稱,我沒有猜測出來,從原始碼看,它們存放的應該是壓縮包的資訊。
#define szbitarray_check(p, i) (((p)[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
#define szbitwithvals_check(p, i) ((p)->defs && ((p)->defs[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
#define szarex_isdir(p, i) (szbitarray_check((p)->isdirs, i))
#define szarex_getfilesize(p, i) ((p)->unpackpositions[(i) + 1] - (p)->unpackpositions[i])
上面四個巨集函式,szbitarray_check檢查陣列位元位是否為0;szbitwithvals_check檢查資料位元位是否為0;szarex_isdir判斷是否是資料夾;szarex_getfilesize獲取檔案大小。
該標頭檔案中還有一些函式的宣告,它們的實現在7zarcin.c中,後期介紹這個檔案的時候,再詳細說明。
7z檔案格式及其原始碼的分析
本文是乙個系列.主要是分享我最近一年做7z檔案開發的經驗.主要包括7z官方原始碼的結構分析,以及7z檔案格式的分析.其中涉及到7z原始碼結構的各個細節,以及7z檔案格式的具體細節.本文適合物件 想要了解學習7z原始碼的開發人員,想要了解7z檔案格式細節,做7z檔案壓縮器和解壓器的開發人員,以及其他壓...
7z解壓命令
支援 7z,zip,zip64,cab,rar,arj,gzip,bzip2,tar,cpio,rpm,iso,deb 壓縮檔案格式 安裝 sudo apt get install p7zip p7zip full p7zip rar 這條命令是將yajiu.jpg和yajiu.png壓縮成乙個7z...
linux下安裝7z命令及7z命令的使用
本文主要介紹了在linux下安裝7z命令的方法,同時介紹了7z命令的使用。7z壓縮格式擁有眾多優點,具有極高的壓縮比率,如果你還不了解,請看文章 7z格式 lzma壓縮演算法和7 zip詳細介紹。reille使用的linux發行版是ubuntu,同時在redhat上業已驗證,可正常使用。1.linu...