EN JA
LIBARCHIVE(3)
LIBARCHIVE(3) FreeBSD Library Functions Manual LIBARCHIVE(3)

名称

libarchiveストリーミングアーカイブを読み込み書き込みするための関数

概説

libarchive ライブラリは、tar と cpio のような様々な形式のアーカイブを読み込んで、書き込むための柔軟性のあるインタフェースを提供しています。また、 libarchive は、gzip と bzip2 のような様々な圧縮フィルタを使用して圧縮されたアーカイブの読み込みと書き込みをサポートしています。ライブラリは、本質的にストリーム指向です。読み込み手は、アーカイブを通して順次繰り返して、書き込み手は、アーカイブに順次追加します。特に、ランダムアクセスまたはインプレース (in-place) 修正のための組み込みサポートがないことに注意してください。訳注: インプレース修正は、作業用の領域を使わずに直接修正すること。

アーカイブを読み込むとき、ライブラリは、自動的に形式と圧縮を検出します。ライブラリは、現在、次の読み込みサポートがあります:

  • 古いスタイルの tar アーカイブ。
  • POSIX “ustar”形式のほとんどの変形。
  • POSIX “pax 交換”形式
  • GNU 形式 tar アーカイブ
  • ほとんどの一般的な cpio アーカイブ形式
  • ISO9660 CD イメージ (RockRidge と Joliet 拡張仕様を含む)
  • zip アーカイブ。
  • ar アーカイブ (GNU/SysV と BSD 拡張を含む)。
  • Microsoft CAB アーカイブ。
  • LHA アーカイブ。
  • mtree ファイルツリー記述。
  • RAR アーカイブ。
  • XAR アーカイブ。

ライブラリは、自動的に gzip(1), bzip2(1), xz(1), lzip(1) または compress(1) で圧縮されたアーカイブ検出して、ユーザが気付くことなくそれらを圧縮復元します。それは、 uuencode(1) で処理されるか、または rpm(1) ヘッダがあるアーカイブを同様に検出してデコードすることができます。

アーカイブを書き込むとき、利用者は、使用される圧縮と使用される形式を指定することができます。ライブラリは、次を書き込むことができます:

  • POSIX 標準の“ustar”アーカイブ
  • POSIX “pax 交換形式”アーカイブ
  • POSIX オクテット指向の cpio アーカイブ。
  • zip アーカイブ。
  • shar アーカイブの 2 つの異なった変形。
  • ISO9660 CD イメージ。
  • 7-Zip アーカイブ。
  • ar アーカイブ。
  • mtree ファイルツリー記述。
  • XAR アーカイブ。

pax 交換形式は、 tar(1) のいくつかのより新しい実装と同様に、多くのシステム上で POSIX 準拠の pax(1) 実装によってサポートされる一般的な方法で、歴史的な tar 形式の制限のすべてを本質的に排除する tar アーカイブ形式の拡張です。デフォルトの書き込み形式は、ほとんどのエントリのために pax 拡張属性を抑制することに注意してください。明らかに pax 書式を要求すると、すべてのエントリのためのそれらの属性を有効にします。

読み込みと書き込みの API は、それぞれ archive_read_XXX() 関数と archive_write_XXX() 関数を通してアクセスされ、いずれも他とは無関係に使用することができます。

このマニュアルページの残りでライブラリ操作の概説を提供します。それぞれの API かユーティリティ関数に関しては、個々のマニュアルページでより詳細な情報を見つけることができます。

アーカイブの読み込み

libarchive_read(3) を参照してください。訳注: libarchive_read(3) は、存在しません。

アーカイブへの書き込み

libarchive_write(3) を参照してください。訳注: libarchive_write(3) は、存在しません。

ディスクへの書き込みエントリ

archive_write_disk(3) API によって、利用者は、 archive_entry(3) オブジェクトを archive_write(3) によって使用された同じ API を使用するディスクに書き込むことができます。 archive_write_disk(3) API は、 archive_read_extract() によって内部的に使用されます。直接それを使用して、エントリがどのようにディスクに書き込まれているかのより大きな制御を提供することができます。また、この API によって、アーカイブからアーカイブへのコピーとアーカイブからディスクへの抽出操作の間でコードを共有することができます。

ディスクからエントリを読み込む

archive_read_disk(3) は、ファイルシステムの情報から archive_entry(3) オブジェクトの追加をサポートします。これは、ACL、拡張属性と他のメタデータと同様に stat(2) システムコールからのアクセス可能な情報を含んでいます。また、 archive_read_disk(3) API は、ファイルのディレクトリが archive_read(3) API と互換性がある API を使用して読み込むことができる、ディレクトリツリーに関する繰り返しをサポートします。

解説

それぞれの関数の詳細な説明は、対応するマニュアルページによって提供されます。

すべての関数は、アーカイブの内容へのアクセスを提供する不透明な (サイズ及び形がわからない) struct archive データ型式を利用します。

struct archive_entry 構造体は、単一のアーカイブエントリの完全な記述を含んでいます。それは、 archive_entry(3) に完全に文書化されている不透明な (サイズ及び形がわからない) インタフェースを使用します。

歴史的な形式に詳しいユーザは、より新しい異形がテキストフィールドのの長さにおけるほとんどの制限を排除したことを承知しているべきです。クライアントは、ファイル名、リンク名、ユーザ名、またはグループ名の長さが制限されると仮定するべきではありません。特に、pax 交換形式は、 PATH_MAX を超える適切な文字セットで容易に適応することができます。

戻り値

ほとんどの関数は、成功すれば ARCHIVE_OK (0) を返し、エラーの場合は、0 以外を返します。おそらくユーザに報告されるべきである小さな問題を示す、 ARCHIVE_WARN から、このアーカイブでどんなさらなる操作も防ぐ深刻な問題を示す、 ARCHIVE_FATAL の範囲で、返り値は、エラーの一般的な重大性を示します。エラーのときに、 archive_errno() 関数は、数値エラーコードを検索するために使用することができます ( errno(2) を参照)。 archive_error_string() は、表示に適したテキスト形式のエラーメッセージを返します。

archive_read_new() と archive_write_new() は、割り付けられて初期化された struct archive オブジェクトへのポインタを返します。

archive_read_data() と archive_write_data() は、実際に読み込まれたか、または書き込まれたバイト数を返します。 0 の値は、このエントリのためのデータの終わりを示します。負の数は、エラーを示します、その場合、 archive_errno() と archive_error_string() 関数は、詳しい情報を得るために使用することができます。

環境変数

現在選択されたロケールによって影響される archive_entry(3) 関数中に文字セット変換があります。

歴史

libarchive ライブラリは、 FreeBSD 5.3 ではじめて登場しました。

作者

libarchive ライブラリは、最初に Tim Kientzle <kientzle@acm.org>によって書かれました。

バグ

いくつかのアーカイブ形式は、 struct archive_entry でサポートされない情報をサポートします。そのような情報は、このライブラリを使用して完全にアーカイブすることができないし、復旧することができません。例えば、これは、コメント、文字セット、または pax 交換形式アーカイブに現れることができる任意のキー/値を含んでいます。

逆に、もちろん、 struct archive_entry に格納することができるすべての情報がすべての形式でサポートされるわけではありません。例えば、cpio 形式は、ナノ秒のタイムスタンプをサポートしません。古い tar 形式は、大きなデバイス番号をサポートしません。

ISO9660 リーダは、まだすべての ISO9660 イメージを読み込むことができません。それは、シークする方法を学ぶべきです。

AR ライタは、他のすべての libarchive ライタと異なり、 2 つのパスを使用することをクライアントプログラムに要求します。

March 18, 2012 FreeBSD