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)。

但是libarchive ( https://github.com/libarchive/libarchive/wiki/Examples ) 本身从各种格式中提取数据,这个功能是 libarchive 的一部分。那么什么时候应该使用它,它有什么作用呢?

和有什么区别

  1. archive_read_support_format_all() ( https://manpages.debian.org/testing/libarchive-dev/archive_read_format.3.en.html )
  2. archive_read_support_filter_all()

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

4

1 回答 1

4

这不是它所说的。archive_read_support_filter_all()只需“启用所有可用的减压过滤器。”。

此外,特定过滤器有一条评论说:

如果在构建时没有适当的库,这些函数可能会依赖外部程序。

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


Q.但是 libarchive ( https://github.com/libarchive/libarchive/wiki/Examples ) 本身会从各种格式中提取数据,这个功能是 libarchive 的一部分

嗯,这取决于它是如何建造的。zip如果有适当的库可以将对档案的支持编译到库中,那么可以。否则上述评论适用:libarchive “可能依赖外部程序”


:有什么区别

  • archive_read_support_format_all()
  • archive_read_support_filter_all()

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

在一些档案中,过滤器总是相同的,但其他的可以混合和匹配(因此流行的传统扩展名,如 .tar.gzip 的 .tgz 和 .tar.bz2 的 .tbz2)。

如果您只想使用 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);
于 2020-07-08T17:36:10.010 回答