magic_open,
magic_close,
magic_error,
magic_file,
magic_buffer,
magic_setflags,
magic_check,
magic_compile,
magic_load —
マジックナンバー識別ライブラリ
ライブラリ¶
Magic Number Recognition Library (libmagic, -lmagic)
<magic.h>
magic_t magic_open(
int
flags)
void
magic_close(
magic_t cookie)
const char *
magic_error(
magic_t cookie)
int
magic_errno(
magic_t cookie)
const char *
magic_file(
magic_t cookie, const char
*filename)
const char *
magic_buffer(
magic_t cookie, const void
*buffer, size_t length)
int
magic_setflags(
magic_t cookie, int
flags)
int
magic_check(
magic_t cookie, const char
*filename)
int
magic_compile(
magic_t cookie, const char
*filename)
int
magic_load(
magic_t cookie, const char
*filename)
これらの関数は
magic(4)
に記述されている magic
データベースファイルを操作する。
関数
magic_open()
はマジッククッキーポインタを生成して返す。
マジッククッキーの割り当てにエラーがあった場合、
この関数は NULL を返す。
flags
引き数は、他のマジック関数の挙動を指定する。
MAGIC_NONE
- 特別な処理を行わない。
MAGIC_DEBUG
- 標準エラー出力にデバッグメッセージを表示する。
MAGIC_SYMLINK
- クエリしたファイルがシンボリックリンクであった場合は、それを辿る。
MAGIC_COMPRESS
- ファイルが圧縮されていた場合は、展開して内容を読み込む。
MAGIC_DEVICES
- ファイルがブロックスペシャルデバイスまたは
キャラクタスペシャルデバイスであった場合、
デバイスをオープンして内容を読み込もうとする。
MAGIC_MIME
- 説明文ではなく
mime 文字列を返す。
MAGIC_CONTINUE
- 最初にマッチしたものだけではなく、マッチした全てを返す。
MAGIC_CHECK
- magic
データベースの整合性をチェックし、
標準エラー出力に警告を表示する。
MAGIC_PRESERVE_ATIME
- utime(2) または
utimes(2)
をサポートするシステムでは、
解析されたファイルのアクセス時刻を保存しようとする。
MAGIC_RAW
- 印刷不能文字を
\ooo のような 8
進数表現に変換しない。
MAGIC_ERROR
- ファイルやシンボリックリンクをオープンしようとしている間に
OS
のエラーが起こった場合、
マジックバッファにエラーを表示せず、実際のエラーとして扱う。
magic_close() 関数は
magic(4)
データベースをクローズして、使用されている全てのリソースを解放する。
magic_error()
関数は最後に発生したエラーの説明文を返す。
エラーがない場合は NULL
を返す。
magic_errno()
関数はシステムコールによって最後に発生した
OS エラーの番号
(
errno(3)) を返す。
magic_file() 関数は
filename
引き数で指定されたファイルの内容についての説明文を返す。
エラーが起った場合は
NULL を返す。
filename が
NULL
の場合は標準入力を使う。
magic_buffer()
関数はバイトサイズ
length の引き数
buffer
の内容について、説明文を返す。
magic_setflags()
関数は上記の
flags
を設定する。
magic_check()
関数を使って、データベースファイルのエントリが有効であるかを検証できる。
検証されるデータベースは、コロン区切りのファイルリストの形式で、
filename
で指定される。
filename が NULL
の場合はデフォルトのデータベースを検証する。
検証が成功した場合は
0 を返し、
失敗した場合は -1
を返す。
magic_compile()
関数を使って、データベースをコンパイルできる。
コンパイルされるデータベースは、コロン区切りのファイルリストの形式で、
filename
で指定される。
filename が NULL
の場合は、デフォルトのデータベースがコンパイルされる。
コンパイルが成功した場合は
0 を返し、
失敗した場合は -1
を返す。
コンパイルして生成されたファイルの名前は、
各ファイル引き数に
basename(1) を適用して
".mgc"
を追加したものになる。
何かマジッククエリを実行する前には、
magic_load()
関数を使ってデータベースファイルをロードしなければならない。
ロードするデータベースは、コロン区切りのファイルリストの形式で、
filename
で指定される。
filename が NULL
の場合は、デフォルトのデータベースがロードされる。
デフォルトのデータベースファイルは、
環境変数 MAGIC
によって名前が指定される。
この環境変数が設定されない場合、
デフォルトのデータベースファイル名は
/usr/share/file/magic である。
magic_load()
データベースファイル名に
".mime" と ".mgc"
を適宜追加する
(どちらか一方の場合もある)。
返り値¶
関数
magic_open()
が成功した場合はマジッククッキーが返される。
失敗した場合は NULL
が返されて、 errno
が適切な値に設定される。
サポートされていない値がフラグに指定された場合、
errno が EINVAL に設定される。
magic_load(),
magic_compile(),
magic_check()
関数が成功した場合は
0
が返され、失敗した場合は
-1 が返される。
magic_file(),
magic_buffer()
関数が成功した場合は文字列が返され、失敗した場合は
NULL が返される。
magic_error()
関数は上記の関数のエラーの説明文を返す。
エラーがない場合は NULL
を返す。 そして、
utime(2) または
utimes(2)
がサポートされていないシステムで
MAGIC_PRESERVE_ATIME
が設定されると、
magic_setflags() は -1
を返す。
ファイル¶
- /usr/share/file/magic.mime
- コンパイルされていないデフォルトの
magic mime データベース。
- /usr/share/file/magic.mime.mgc
- コンパイル済みのデフォルトの
magic mime データベース。
- /usr/share/file/magic
- コンパイルされていないデフォルトの
magic データベース。
- /usr/share/file/magic.mgc
- コンパイル済みのデフォルトの
magic データベース。
関連項目¶
file(1),
magic(4)
Mans Rullgard が最初の libmagic
の実装と構成を行った。
Christos Zoulas は API を整理し、
エラーコードと
(マジッククッキーの)
割り当てを実装した。