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

名称

archive_entry_gid, archive_entry_set_gid, archive_entry_uid, archive_entry_set_uid, archive_entry_perm, archive_entry_set_perm, archive_entry_strmode, archive_entry_uname archive_entry_uname_w archive_entry_set_uname, archive_entry_copy_uname, archive_entry_copy_uname_w, archive_entry_update_uname_utf8, archive_entry_gname, archive_entry_gname_w, archive_entry_set_gname, archive_entry_copy_gname, archive_entry_copy_gname_w, archive_entry_update_gname_utf8, archive_entry_fflags, archive_entry_fflags_text, archive_entry_set_fflags, archive_entry_copy_fflags_text, archive_entry_copy_fflags_text_wアーカイブエントリの記述で所有権とパーミッションを操作するための関数

ライブラリ

ストリーミングアーカイブライブラリ (libarchive, -larchive)

書式

#include < archive_entry.h>

gid_t
archive_entry_gid( struct archive_entry *a);

void
archive_entry_set_gid( struct archive_entry *a, gid_t gid);

uid_t
archive_entry_uid( struct archive_entry *a);

void
archive_entry_set_uid( struct archive_entry *a, uid_t uid);

mode_t
archive_entry_perm( struct archive_entry *a);

void
archive_entry_set_perm( struct archive_entry *a, mode_t mode);

const char *
archive_entry_strmode( struct archive_entry *a);

const char *
archive_entry_gname( struct archive_entry *a);

const wchar_t *
archive_entry_gname_w( struct archive_entry *a);

void
archive_entry_set_gname( struct archive_entry *a, const char *a);

void
archive_entry_copy_gname( struct archive_entry *a, const char *name);

void
archive_entry_copy_gname_w( struct archive_entry *a, const wchar_t *name);

int
archive_entry_update_gname_utf8( struct archive_entry *a, const char *name);

const char *
archive_entry_uname( struct archive_entry *a);

const wchar_t *
archive_entry_uname_w( struct archive_entry *a);

void
archive_entry_set_uname( struct archive_entry *a, const char *name);

void
archive_entry_copy_uname( struct archive_entry *a, const char *name);

void
archive_entry_copy_uname_w( struct archive_entry *a, const wchar_t *name);

int
archive_entry_update_uname_utf8( struct archive_entry *a, const char *name);

void
archive_entry_fflags( struct archive_entry *a, unsigned long *set_bits, unsigned long *clear_bits);

const char *
archive_entry_fflags_text( struct archive_entry *a);

void
archive_entry_set_fflags( struct archive_entry *a, unsigned long set_bits, unsigned long clear_bits);

const char *
archive_entry_copy_fflags_text( struct archive_entry *a, const char *text);

const wchar_t *
archive_entry_copy_fflags_text_w( struct archive_entry *a, const wchar_t *text);

解説

ユーザ ID、グループ ID とモード

関数 archive_entry_uid(), archive_entry_gid() と archive_entry_perm() を、与えられたエントリからユーザ ID、グループ ID とパーミッションを抽出するために使用することができます。対応する関数 archive_entry_set_uid(), archive_entry_set_gid() と archive_entry_set_perm() は、エントリに与えられたユーザ ID、グループ ID とパーミッションを格納します。また、パーミッションは、 archive_entry_set_mode() を呼び出す副作用として設定されます。

archive_entry_strmode() は、 ls(1) の長いモードによって使用されるようなパーミッションの文字列表現を返します。

ユーザとグループ名

ユーザとグループ名は、次の 3 つの異なる方法のうちの 1 つで提供することができます:
char *
現在のロケールのマルチバイト文字列。
wchar_t *
現在のロケールのワイド文字列。アクセサ関数は、 XXX_w() と名前が付けられています。
UTF-8
UTF-8 としてエンコードされた Unicode 文字列。これは、マルチバイトとワイド文字列の両方を同時に更新する便利な関数です。

archive_entry_set_XXX() は、 archive_entry_copy_XXX() のための別名です。

ファイルフラグ

ファイルフラグは、ビットマップ表現とテキスト形式の間で透過的に変換されます。例えば、ビットマップを設定し、テキストを要求するなら、ライブラリは、正規のテキスト形式を構築します。しかしながら、テキスト形式を設定し、テキスト形式を要求するなら、たとえ、それが不適格でも、同じテキストを戻します。テキスト形式のフラグ文字列を正規化する必要があるなら、テキスト形式を最初に設定するべきで、次に、ビットマップ形式を要求し、次に、ビットマップ形式を設定するためにそれを使用します。ビットマップ形式の設定は、内部のテキスト表現をクリアし、次にテキスト形式を要求するとき、強制的に再構成されます。

ビットマップ形式は、2 つの整数、設定されるべきビットを含んでいるもの、クリアされるべき他の指定ビットから成ります。いずれかのビットマップで言及されないビットは、無視されます。通常、クリアされるビットのビットマップは、0 に設定されます。特殊な状況で、設定するフラグのビットマップの補数にクリアするフラグのビットマップを設定することによって、ファイルフラグのセットを強制的に完全に指定することができます。 (これは、セットビットの名前を単に含んでいる、 fflagstostr(3) と異なります。) ビットマップをテキスト形式の文字列に変換することは、プラットフォームに特有の操作です。現在のプラットフォームで意味がないビットは、無視されます。

正式のテキスト形式は、フラグ名のコンマで区切られたリストです。 archive_entry_copy_fflags_text() と archive_entry_copy_fflags_text_w() 関数は、提供されるテキストを解析し、内部のビットマップ値を設定します。これは、プラットフォームに特有の操作です。現在のプラットフォームで意味がない名前は、無視されます。関数は、認識されなかった最初の名前の先頭へのポインタを返すか、またはすべての名前が認識されたなら、NULL を返します。すべての名前—認識されない名前に続く名前を含む—は、評価され、ビットマップは、認識されるすべての名前を反映するように設定されます。 (特に、これは、最初の解釈されない名前で解析を止める、 strtofflags(3) と異なります。)

バグ

プラットフォームのタイプ uid_tgid_t は、しばしば、16 または 32 ビットの幅です。この場合、アーカイブから正確に ids を復旧することができず、切り詰めることががありえます。
February 2, 2012 FreeBSD