首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为libmagic提供一个神奇的数据库

为libmagic提供一个神奇的数据库
EN

Stack Overflow用户
提问于 2021-08-11 07:21:26
回答 1查看 72关注 0票数 0

我有一个简单的C代码,它返回给定文件的文件类型。我可以在命令行中为它指定任何文件名,它将返回以下文件类型:

代码语言:javascript
复制
#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程序,这样它就不依赖于系统提供的数据库了?

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 07:30:01

所以我可以使用这个:

代码语言:javascript
复制
magic_load(magic, "/tmp/magic.mgc") ;

假设该文件位于/tmp/目录中。我已经看到mgc扩展是很重要的,否则程序就会出现段错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68737658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档