什么是压缩实用程序使用的LZW算法的POSIX系统库

时间:2015-12-19 09:39:16

标签: c http unix compression lempel-ziv-76

这对谷歌来说是个难以置信的难题。 我不是在寻找gzip或Zip或deflate。我想要使​​用的算法称为“压缩”,但这并不意味着我试图通常实现压缩。我正在寻找一种特定的算法。

我正在寻找类Unix系统中compress命令行工具使用的自适应Lempel-Ziv算法。我正在寻找HTTP说你应该在收到Content-Encoding: compress标题时使用的算法。这是您在POSIX shell和this Wikipedia article中键入man compress时所看到的算法。

据我所知,这种压缩算法非常陈旧,并且已被gzip,Zip,deflate等取代,几乎用于所有实际目的。但我正在用C ++编写一个服务器作为宠物项目,IANA将这种Unix“压缩”算法指定为每个服务器应该支持的编码之一。

compress实用程序很长一段时间以来一直是Unix shell的一部分 - 因为在POSIX之前 - 我很难相信没有标准的C语言实现。我可以使用对systemexec的调用来在shell中进行压缩(创建另一个进程......呃)但这样做效率会低于仅编译算法进入我的可执行文件。

此算法是否有标准的C实现/库?

4 个答案:

答案 0 :(得分:1)

我想我找到了一些很好的参考资料:

首先是基于Lempel-Ziv的Free BSD压缩实现: https://www.freebsd.org/security/advisories/FreeBSD-SA-11:04.compress.asc

Herehere Lempel-Ziv算法的修改版本(作者之一,你会发现Spencer W. Thomas)。

较新的implementation

DOS porting

Apple version基于免费BSD。

提示:搜索" compress.c"引述。

答案 1 :(得分:1)

当然在Linux中,系统库libarchive支持 compress 使用的LZW。

库有自己的project page,因此在这个意义上是可移植的,尽管毫无疑问它可以用在其他POSIX系统上。试试 man libarchive 吧?

答案 2 :(得分:1)

您可以找到我编写unlzw()的{​​{1}}函数来解压缩Content-Encoding:压缩传输。

但是,必须支持compress符合http。压缩方法是一种协商,您可以不说您接受压缩(如果您是客户端)或在客户端接受压缩时不提供压缩(如果您是服务器)。并不是每个服务器都应支持"压缩编码。

答案 3 :(得分:0)

您可以使用lzws库。它没有遗留代码,并且与UNIX压缩兼容。在GNU / Linux,OSX和Free BSD上测试。有ruby bindings

相关问题