我正在尝试实现一个使用zlib的内核模块,那么有没有可用于linux-2.6.17.8的Zlib模块?
如果我需要将zlib的源文件转换为内核空间,我需要替换malloc,函数调用,断言等?
我确实搜索了这个主题,但我没有找到任何相关的线索.
任何人都可以给我一些可以解决问题的技巧或演示代码吗?
提前致谢.
--- --- FYI
我想在这里做的是压缩文件并上传到远程PC.我认为它将采取以下步骤:
a)初始化压缩文件头并发送到远程PC并保存该压缩文件头.
b)打开文件以读取文件数据的一部分并在本地压缩文件数据.
c)通过管道(例如tcp或udp)将压缩数据发送到远程PC.
d)将数据从压缩管道保存在远程PC上.
e)如果有多个文件,请回到b)
e)当所有文件都被压缩并传输到远程PC时,然后关闭压缩文件.
这里有两个问题:
a)压缩/解压缩
b)文件格式
多谢你们!
我想使用zlib,因为我认为它是gzip的最佳和最快的方式NSData.但是,有更好的方法吗?
如果没有,我应该在Xcode中链接哪个版本的zlib库:libz.dylib,libz.1.dylib,libz.1.1.3.dylib或libz.1.2.5.dylib?
请提供一个代码示例,说明如何将zlib转换NSData *normalHTTPBody为NSData gzippedHTTPBody
最近我需要在 Ubuntu 上使用 zlib 进行编程,这里我遇到了问题。我写了一个小程序来测试 zlib 函数,并在 Eclipse 中构建它。我发现它可以编译,但有一些像这样的链接错误:
main.cpp:27: undefined reference to `compress'
main.cpp:38: undefined reference to `uncompress'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?如果这是因为没有库文件?
任何人都可以提供一些帮助吗?非常感谢!
MOODY_Y
另外,这是我的建筑信息:
11:59:08 **** Build of configuration Debug for project test_zlib ****
make all
Building file: ../main.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: test_zlib
Invoking: GCC C++ Linker
g++ -o "test_zlib" ./main.o
./main.o: In function `main':
/home/hyq/workspace/test_zlib/Debug/../main.cpp:27: undefined reference to `compress'
/home/hyq/workspace/test_zlib/Debug/../main.cpp:38: undefined …Run Code Online (Sandbox Code Playgroud) 我做了一个简单的函数,它需要一个 gzipped 文件,并在某处提取。出于测试目的,我使用了一个通过通用实用程序gzip压缩的文本文件。但出于某种原因,Uncompress ()返回错误Z_DATA_ERROR。
我走进调试器直到函数,它肯定会得到正确的数据(整个文件内容,它只有 37 个字节),所以它似乎是两个之一:可怕的 zlib-bug 现在正在窃取你的时间,或者我错过了一些重要的东西,然后我真的很抱歉。
#include <zlib.h>
#include <cstdio>
int UngzipFile(FILE* Dest, FILE* Source){
#define IN_SIZE 256
#define OUT_SIZE 2048
bool EOFReached=false;
Bytef in[IN_SIZE];
Bytef out[OUT_SIZE];
while(!EOFReached){//for no eof
uLong In_ReadCnt = fread(in,1,IN_SIZE,Source);//read a bytes from a file to input buffer
if(In_ReadCnt!=IN_SIZE){
if(!feof(Source) ){
perror("ERR");
return 0;
}
else EOFReached=true;
}
uLong OutReadCnt = OUT_SIZE;//upon exit 'uncompress' this will have actual uncompressed size
int err = uncompress(out, &OutReadCnt, in, In_ReadCnt);//uncompress …Run Code Online (Sandbox Code Playgroud) 我有一个问题zlib。如何知道写入的压缩字节数?我正在使用gzwrite(...). 正如我们所知,它返回写入的未压缩(实际)字节数。
我应该使用其他 API 而不是gzwrite()?
我在做什么, - 我有一个 .gz 输出文件。当我有一些可用的内容时,我会不断写入文件。我还想跟踪文件,使其不会超过特定大小。我不想使用stat() linux API因为我的写作非常频繁。
建议?
我在 Python 和 C 中对 crc32 进行了一些试验,但我的结果不匹配。
C:
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>
#define NUM_BYTES 9
int
main(void)
{
uint8_t bytes[NUM_BYTES] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
uint32_t crc = crc32(0L, Z_NULL, 0);
for (int i = 0; i < NUM_BYTES; ++i) {
crc = crc32(crc, bytes, 1);
}
printf("CRC32 value is: %" PRIu32 "\n", crc);
}
Run Code Online (Sandbox Code Playgroud)
给出输出 CRC32 value is: 3136421207
Python
In [1]: import zlib
In [2]: int(zlib.crc32("123456789") + 2**32)
Out[2]: 3421780262
Run Code Online (Sandbox Code Playgroud)
在 …
我想使用 python 解压 Android 备份文件。
根据http://nelenkov.blogspot.com/2012/06/unpacking-android-backups.html可以使用解压缩未加密的 adb 文件
dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar
Run Code Online (Sandbox Code Playgroud)
和
tar xvf mybackup.tar
Run Code Online (Sandbox Code Playgroud)
这些可以在python中完成吗?Python 有zlib,gzip和tarfile,它们似乎应该可用。无论如何,如果他们可以做到,该怎么做?
将tarfile.open('filename.tar', 'r:')第二步工作?
我在窗户上,顺便说一句。
这个问题继续在这里开始讨论.我发现由于deflate后者的压缩,无法将HTTP响应主体解组为JSON对象.现在我想知道如何使用Golang进行解压缩.我将非常感谢能够在我的代码中显示错误的任何人.
输入数据
我已将HTTP响应主体转储到' test '文件中.就这个:
$ cat test
x??PAN?0?
;??NtJ?F?dU?|"oVR?C%?f?????Z.?^Hs?dW??'??DH?S?SFVC????r)G,?????<???z}?x_g?+?2??sl?r/?Oy>??J3\?G?9???N???#[5M?^v/?2???|?h??[?~7?_?<D*???/??i
Run Code Online (Sandbox Code Playgroud)
让我们确保这个文件可以解压缩,甚至包含有效的JSON:
$ zlib-flate -uncompress < test
{"timestamp":{"tv_sec":1428488670,"tv_usec":197041},"string_timestamp":"2015-04-08 10:24:30.197041","monitor_status":"enabled","commands":{"REVERSE_LOOKUP":{"cache":{"outside":{"successes":0,"failures":0,"size":0,"time":0},"internal":{"successes":0,"failures":0,"size":0,"time":0}},"disk":{"outside":{"successes":0,"failures":0,"size":0,"time":0},"internal":{"successes":13366,"failures":0,"size":0,"time":501808}},"total":{"storage":{"successes":0,"failures":0},"proxy":{"successes":13366,"failures":0}}},"clients":{}}}
$ zlib-flate -uncompress < test | python -m json.tool
{
"commands": {
"REVERSE_LOOKUP": {
"cache": {
....
Run Code Online (Sandbox Code Playgroud)
源代码
package main
import (
"bytes"
"compress/flate"
"fmt"
"io/ioutil"
)
func main() {
fname := "./test"
content, err := ioutil.ReadFile(fname)
if err != nil {
panic(err)
}
fmt.Println("File content:\n", content)
enflated, err := ioutil.ReadAll(flate.NewReader(bytes.NewReader(content)))
if err != nil {
panic(err)
} …Run Code Online (Sandbox Code Playgroud) 我希望zLib透明模式(gzptintf())和常规fprintf()一样快.我发现带有"wT"的zLib gzprintf()比fprintf()慢2.5倍.有关此性能问题的解决方法吗?
细节:
我在Linux上使用libz.so.1.2.8(fedora 22,内核4.0.5,Intel(R)Core(TM)i7-3770 CPU @ 3.40GHz)为我的事件跟踪收集器提供输出文件压缩选项.为了保持传统兼容性,我需要透明文件格式写入模式.
正如我所见,gzopen中的选项"T"允许写入没有压缩的文件而没有gzip头记录.
问题在于性能.透明模式比简单标准fprintf慢约2.5倍.
这是快速测试结果(值在TSC中):
zLib]$ ./zlib_transparent
Performance fprintf vs gzprintf (transparent):
fprintf 22883026324
zLib transp 62305122876
ratio 2.72277
Run Code Online (Sandbox Code Playgroud)
此测试的来源:
#include <stdio.h>
#include <zlib.h>
#include <iostream>
#include <sstream>
#include <iomanip>
#define NUMITERATIONS 10000000
static double buffer[NUMITERATIONS];
static __inline__ unsigned long long rdtsc(void){
unsigned hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
long long test_fprintf(double *buffer){
long long t = rdtsc();
#ifdef USE_FPRINTF
double tmp …Run Code Online (Sandbox Code Playgroud)