指定されたファイルのファイルタイプを返す単純な C コードがあります。コマンドラインから任意のファイル名を指定すると、ファイルタイプが返されます。
#include <magic.h>
#include <stdio.h>
int main(int argc, char **argv) {
unsigned modes = (
MAGIC_MIME | MAGIC_CHECK |
MAGIC_CONTINUE | MAGIC_SYMLINK
) ;
struct magic_set *magic = magic_open(modes) ;
// unsigned long value ;
// magic_getparam(magic, MAGIC_PARAM_REGEX_MAX, &value) ;
// printf("%ld\n", value) ;
magic_load(magic, NULL) ;
if(!argv[1]) return 1 ;
const char *mm = magic_file(magic, argv[1]) ;
if(mm < 0) {
const char *err = magic_error(magic) ;
puts(err) ;
return 1 ;
}
puts(mm) ;
magic_close(magic) ;
}
問題は、これをパッケージ ファイルに依存したくないことです。また、別の名前に変更/usr/share/file/misc/magic.mgc
しても機能しません。マンページによると、これはコンパイル済みファイルであり、コンパイルされていないデータベースも存在する可能性があります。
そのため、ファイルをローカル ディレクトリにコピーしmagic.mgc
、コンパイルされたプログラムをそのまま実行したいと考えています。
システムが提供するデータベースに依存しないように、ローカルのマジック データベースを C プログラムに渡すことはできますか?