libextractor をインストールしようとしましたが、動作しませんでした ( への呼び出し時に常に NULL プラグイン ポインターを返しますEXTRACTOR_plugin_add_defaults()
) 。
から: http://www.gnu.org/software/libextractor/manual/libextractor.html#Extracting
Function Pointer: int
(*EXTRACTOR_MetaDataProcessor)(void *cls,
const char *plugin_name,
enum EXTRACTOR_MetaType type,
enum EXTRACTOR_MetaFormat format,
const char *data_mime_type,
const char *data,
size_t data_len)
と
見つかった各メタデータ項目に対して libextractor が呼び出す関数のタイプ。
cls
closure (user-defined)
plugin_name
name of the plugin that produced this value;
special values can be used (i.e. '<zlib>' for
zlib being used in the main libextractor library
and yielding meta data);
type
libextractor-type describing the meta data;
format basic
format information about data
data_mime_type
mime-type of data (not of the original file);
can be NULL (if mime-type is not known);
data
actual meta-data found
data_len
number of bytes in data
Return 0 to continue extracting, 1 to abort.
したがって、好きなように呼び出される独自の関数を作成し、この宣言を次のようにする必要があります。
int whateveryouwant(void *cls,
const char *plugin_name,
enum EXTRACTOR_MetaType type,
enum EXTRACTOR_MetaFormat format,
const char *data_mime_type,
const char *data,
size_t data_len)
{
// Do your stuff here
if(stop)
return 1; // Stops
else
return 0; // Continues
}
次の方法で呼び出します。
EXTRACTOR_extract (plugins, argv[1],
NULL, 0,
&whateveryouwant,
NULL/* here be dragons */);
http://www.gnu.org/software/libextractor/manual/libextractor.html#Generalities「3.3 libextractor ライブラリの紹介」で説明されているように
[here be dragons]: ユーザーが使用するために残されているパラメーターです (そう言うのは冗長ですが)。ドキュメントで定義されているように、「見つかったメタデータ項目ごとに、GNU libextractor は 'proc' 関数を呼び出し、'proc_cls' を最初の引数として 'proc' に渡します。」
ここで、「proc
関数」は追加した関数 (whateveryouwant()
ここ) でありproc_cls
、関数にデータを渡すための任意のポインター (何でもかまいません) です。stdout
に出力するために、例のへのポインターのようにstdout
。そうは言っても、関数は必然的にstdout
;ではなく FILE* に書き込むのではないかと思います。したがって、書き込み用にファイルを開き、その「ファイル記述子」を lastEXTRACTOR_extract()
のパラメーターとして渡すと、現在画面で読み取ることができる情報で満たされたファイルで終了する可能性があります。それは情報にアクセスするための適切な方法ではありませんが、何らかの動作や機能をテストするための簡単で汚い方法を検討している場合は、適切な関数を作成するまでは、それが可能です。
あなたのコードで頑張ってください!