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

What is the POSIX System Library for the LZW Algorithm Used by the Compress Utility

这对 Google 来说是一个非常困难的问题。 我不是在寻找 gzip、Zip 或 deflate。我想使用的算法称为 "compress" 但这并不意味着我正在尝试实施一般压缩。我正在寻找特定的算法。

我正在寻找 Unix-like 系统中 compress 命令行工具使用的自适应 Lempel-Ziv 算法。我正在寻找 HTTP 规定您在收到 Content-Encoding: compress header 时应该使用的算法。这是您在 POSIX shell 和 this Wikipedia article.

中键入 man compress 时所描述的算法

据我所知,这种压缩算法非常古老,在几乎所有实际用途中已被 gzip、Zip、deflate 等所取代。但我正在用 C++ 编写一个服务器作为一个宠物项目,IANA 将此 Unix "compress" 算法指定为每个服务器应支持的编码之一。

compress 实用程序长期以来一直是 Unix shell 的一部分 - 从 POSIX 之前 - 我很难相信没有标准的 C 语言实现。我 可以 使用对 systemexec 的调用在 shell 中进行压缩(创建另一个进程......呃)但那将是比将算法编译到我的可执行文件中效率低得多。

这个算法有标准的 C implementation/library 吗?

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

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

Here and here Lempel-Ziv 算法的修改版本(在作者中您会发现 Spencer W. Thomas)。

较新implementation

DOS porting

Apple version 基于免费 BSD。

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

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

该库有自己的 project page,因此从这个意义上讲,它是可移植的,尽管它无疑在其他(如果不是全部)POSIX 系统上使用。也许试试 man libarchive

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

但是,您 不必 支持压缩才能与 http 兼容。压缩方法是协商的,你可以不说你接受压缩(如果你是客户端)或者当客户端接受它时不传递压缩(如果你是服务器)。 "every server should support"压缩编码是不正确的。

您可以使用 lzws library. It has no legacy code and compatible with UNIX compress. Tested on GNU/Linux, OSX, Free BSD and Windows (MinGW). Has ruby bindings.