我尝试安装 libextractor 并未能使其正常工作(它总是在调用时返回一个 NULL 插件指针EXTRACTOR_plugin_add_defaults()
),所以我接下来要写的不是 TESTED:
来自: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
. 话虽如此,我怀疑该函数写入 FILE* 而并非不可避免地写入stdout
; 因此,如果您打开一个文件进行写入,并将其“文件描述符”作为 lastEXTRACTOR_extract()
的参数传递,您可能会以一个填充了您当前可以在屏幕上读取的信息的文件结束。这不是访问信息的正确方法,但是如果您正在寻找一种快速而肮脏的方法来测试某些行为或某些功能;可以做到这一点,直到你编写一个适当的函数。
祝你的代码好运!