Что делает archive_read_support_filter_all ()? - PullRequest
1 голос
/ 08 июля 2020

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 и не уверен, каково использование этой функции.

1 Ответ

2 голосов
/ 08 июля 2020

Это не то, что написано. archive_read_support_filter_all() просто «Включает все доступные фильтры декомпрессии».

Кроме того, есть замечание с указанием c фильтров, в котором говорится:

Эти функции могут вернуться к внешние программы, если соответствующая библиотека не была доступна во время сборки.

Итак, _all - это просто надмножество всех других (определенных c) фильтров.

Q. Но libarchive (https://github.com/libarchive/libarchive/wiki/Examples) сам извлекает данные из различных форматов, и эта функция является частью libarchive

Ну, это зависит от того, как он был построен. Если бы подходящие библиотеки были рядом, чтобы скомпилировать поддержку, скажем, zip архивов в библиотеку, тогда да. В противном случае применяется приведенный выше комментарий: libarchive "может использовать внешние программы"

Q. В чем разница между

  • archive_read_support_format_all()
  • archive_read_support_filter_all()

Архив имеет специальный формат c (cpio, tar, zip и т. Д. c). Кроме того, его можно фильтровать (gzip, bzip2, lzop, xz et c).

В некоторых архивах фильтры всегда одни и те же, но другие можно смешивать и сопоставлять (отсюда и популярные традиционные расширения, такие как. tgz для .tar.gzip и .tbz2 для .tar.bz2).

Если вы хотите включить tar только с bzip2, используйте:

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);
...