archive_read_support_filter_all()函数是什么作用?

3

archive_read_support_filter_all() 允许代码在构建时不具备适当的库时使用外部程序。(请参阅https://www.freebsd.org/cgi/man.cgi?query=archive_read_support_filter_all&sektion=3&apropos=0&manpath=FreeBSD%2B10.0-RELEASE)。

但是libarchivehttps://github.com/libarchive/libarchive/wiki/Examples)本身从各种格式中提取数据,并且此函数是libarchive的一部分。那么什么时候应该使用它,它又有什么作用呢?

archive_read_support_format_all()https://manpages.debian.org/testing/libarchive-dev/archive_read_format.3.en.html)与archive_read_support_filter_all()之间有什么区别?


我正在使用Libarchive从ODF文件中提取数据,我在Libarchive的文档和示例中遇到了这个函数,但不确定这个函数的用途是什么。

1个回答

4

这并不是它原本的含义。 archive_read_support_filter_all() 只是“启用所有可用的解压缩过滤器”。

此外,有一则具体过滤器的备注如下:

如果在构建时没有可用的适当库,则这些函数可能会退回到外部程序。

所以, _all 只是其他(特定的)过滤器的超集。


问: 但是libarchive (https://github.com/libarchive/libarchive/wiki/Examples) 自己从各种格式中提取数据,而这个函数是 libarchive 的一部分。

那要看它是如何构建的。如果有适当的库,可以将例如zip存档编译支持到库中,那么是的。否则,上面的评论就适用:libarchive “可能会退回到外部程序”。


问: archive_read_support_format_all() 和 archive_read_support_filter_all() 有什么区别?

  • archive_read_support_format_all()
  • archive_read_support_filter_all()

一个存档具有特定格式(cpio、tar、zip等)。此外,它可以被过滤(gzip、bzip2、lzop、xz等)。

在某些存档中,过滤器总是相同的,但其他存档可以混合和匹配(因此有像 .tgz 用于 .tar.gzip 和 .tbz2 用于 .tar.bz2 的传统扩展名)。

如果您只想启用带有 bzip2 的 tar,请使用:

archive_read_support_format_tar(ar);
archive_read_support_filter_bzip2(ar);

如果您想要使用所有可能的压缩/其他编码过滤器,并且它是tar格式:

archive_read_support_format_tar(ar);
archive_read_support_filter_all(ar);

如果您想要 cpio、ar、tar 归档文件,但前提是不压缩:

archive_read_support_format_ar(ar);
archive_read_support_format_cpio(ar);
archive_read_support_format_tar(ar);

谢谢你的帮助。你能否详细说明一下你在答案的最后部分所说的意思是什么?“如果你想要 cpio、ar、tar 归档,但只有在未压缩的情况下才需要:” - Parth Kapadia
如果这不清楚,也许你没有理解格式和过滤器的区别。例如:tar -cf a.tar abc.txt 是一个 tar 格式的归档文件。然后,您可以通过 gzip 进行 _过滤_,使其成为压缩归档文件。如果您不想支持压缩归档文件,则不会启用该过滤器(但仍会启用 tar 格式)。 - sehe
但是tar本身不是一种压缩格式吗?gzip是一种可用于压缩/解压文件的压缩算法,对吧? - Parth Kapadia
@ParthKapadia 是的!它不是。现在你明白了。这就是我们一直在说的。请注意,这非常容易看出来。制作一个tgz并解压缩它。观察结果是标准的tar服务。 - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接