在C程序中包含UNIX实用程序'file'

时间:2012-02-05 21:00:22

标签: c linux mime-types

我正在用C编写程序,我需要知道文件的mime类型。

我还在谷歌搜索过,我发现I must include the 'file' UNIX utility in my project

file的源代码需要configuremake。我如何在我的项目中包含这个?我是否必须将部分源代码裁剪为新的file.cfile.h

2 个答案:

答案 0 :(得分:6)

您想根据扩展程序猜测MIME类型,还是执行file之类的操作并检查标题?

要获得与file类似的功能,您无需在项目中包含file。相反,你会想要使用file基于的libmagic。不幸的是,我不知道这方面有很好的文档来源,但它非常简单。

magic_t magic = magic_open(MAGIC_MIME_TYPE);
magic_load(magic, NULL);
char *mime_type = magic_file(magic, "/path/to/file");
magic_close(magic);

答案 1 :(得分:0)

感谢您的回答和评论。

我解决了这个问题:

const char *w_get_mime(const char *arg, const char *file, int line_no)
{

    const char *magic_full;
    magic_t magic_cookie;

    if(arg == NULL)
        w_report_error("called with NULL argument.",file,line_no,__func__,0,1,error);
    else if ((magic_cookie = magic_open(MAGIC_MIME) ) == NULL) 
        report_error("unable to initialize magic library.",0,1,error);
    else if (magic_load(magic_cookie, NULL) != 0) 
    {
        magic_close(magic_cookie);
        snprintf(globals.err_buff,MAX_BUFF,"cannot load magic database - %s .",magic_error(magic_cookie));
        report_error(globals.err_buff,0,1,error);
    }
    magic_full = magic_file(magic_cookie, arg);
    magic_close(magic_cookie);
    return magic_full;
}

非常感谢! :)