作者 主題: [新手] 如何用zlib 開一個gzip 的file  (閱讀 6432 次)

0 會員 與 1 訪客 正在閱讀本文。

小政

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
[新手] 如何用zlib 開一個gzip 的file
« 於: 2007-03-09 00:44 »
如何寫個c code,把收到的gzip file,
不要用system code 解壓縮,
而是在c用in memory的方式解。

小弟看到可以用zlib library,
可是因為是寫程式的新手,
所以不太會用,
有沒有高手有寫過,可以share一下source code,
還是教小弟一下,

謝謝

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
[新手] 如何用zlib 開一個gzip 的file
« 回覆 #1 於: 2007-03-09 20:59 »
哇!!!!聽起來滿屌的^^!!我也很想知道呢 :D

基本上如果您知道可以用哪一個*lib函數庫去達成某項功能
那就去把該函數庫裡面的函數通通列出來(盡量詳細)
相信所有答案都在該函數群的名稱裡面了而在記憶體裡面解的話應該像這樣吧

*.zip--->取到mem_buffa--->zlib函數--->存到mem_buffb

邏輯很簡單,重點就在您對zlib函數庫的掌握度了
及mem_buffb的長度該如何宣告(如果有計算壓縮比的函數的話就粉美滿了)

參考參考吧
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[新手] 如何用zlib 開一個gzip 的file
« 回覆 #2 於: 2007-03-10 00:53 »
source code? gzip 本身算不算呢? 這東西本來就有 source 可以看了.

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
[新手] 如何用zlib 開一個gzip 的file
« 回覆 #3 於: 2007-03-11 21:08 »
讀寫的函數與 fopen、fread、fclose 很類似,只要改成 gzopen、gzread、gzclose 其他的請自行參考 zlib.h。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com

小政

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
再請教一下
« 回覆 #5 於: 2007-03-13 15:34 »
我看了一下glib.h 跟zlib , 我覺得我需要用到的可能是zlib的inflateinit2()跟deflateinit2()的function, 因為是寫程式的新手,實在是不知從那邊下手,所以想說有沒有人有用過這兩個function code, 可以把source code 借我看,讓我拿來當example,就比較理解如何用這兩個function code 了。

謝謝

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
[新手] 如何用zlib 開一個gzip 的file
« 回覆 #6 於: 2007-03-13 15:51 »
能不能把函數列出來(最好多一些)然後將該函數的註解翻譯一下(我英文很差)

應該是看他要什麼參數就餵給他---->然後吐出來的就是所要的結果

不過有可能是要一個檔案名稱,那就繞一下路去處理那個檔案反正結果也是在程式的控制
範圍內處理不用system()的方式處理這樣比較能掌控流程去處理想處理的部份,不用受限
所以對函數庫的掌握度比較重要(個人認為)

處理流程是不是那麼簡單我可說不準(多檔案壓成一個檔時)
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
[新手] 如何用zlib 開一個gzip 的file
« 回覆 #7 於: 2007-03-13 16:07 »
int gzread (gzFile file, voidp buf, unsigned len);
/*read()為由已開啟的檔案讀取資料,所以應該是開啟一個經壓縮過的檔案
參數部份
gzFile file與read()相同是一個指向已開啟檔案的檔案描述符所以應該還有一個
對應的開檔函數
voidp buf存入結果的空間,其長度為unsigned len所以應該要先計算該檔長度
以stat()系列函數可辦到,獲該函數庫內有專用的函數
*/

這是參照yamaka大大提供的連結註解出來的,可能與實際用途有所不同但猜想應該
差不遠了,所以先註解一下,不了解的翻一下書上相關的函數沒有gz的看看有沒有,
gzread()我是翻到書上read()的部分參考出來及自己的一些想法後註解出來的您可以參考看看

這樣註解完相信也能掌握到很大部份了(開始比較困難但會漸入佳境)

試試看吧
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼