0

我有一个简单的 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程序,使其不依赖系统提供的数据库?

4

1 回答 1

0

所以我可以使用这个:

magic_load(magic, "/tmp/magic.mgc") ;

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

于 2021-08-11T07:30:01.020 回答