включить утилиту UNIX 'file' в программу на C - PullRequest
0 голосов
/ 06 февраля 2012

Я пишу программу на C, и мне нужно знать mime-тип файла.

Я уже искал в Google и обнаружил, что Я должен включить в свой проект утилиту UNIX 'file' .

Исходный код file нужен configure и make. Как я могу включить это в свой проект? Нужно ли обрезать часть исходного кода в новые file.c и file.h?

Ответы [ 2 ]

6 голосов
/ 06 февраля 2012

Хотите угадать тип MIME на основе расширения или сделать что-то вроде file и проверить заголовки?

Чтобы получить функциональность, аналогичную file, вам не нужно включать file в ваш проект. Вместо этого вы захотите использовать libmagic, на котором основан file. К сожалению, я не знаю хорошего источника документации для этого, но это довольно просто.

magic_t magic = magic_open(MAGIC_MIME_TYPE);
magic_load(magic, NULL);
char *mime_type = magic_file(magic, "/path/to/file");
magic_close(magic);
0 голосов
/ 06 февраля 2012

Спасибо за ваши ответы и комментарии.

Я решил с этим:

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;
}

спасибо большое! :)

...