2012-02-05 3 views
0

저는 C로 프로그램을 작성 중이며, 파일의 MIME 유형을 알아야합니다.은 C 프로그램의 UNIX 유틸리티 'file'을 포함합니다.

Google로 검색 한 결과 I must include the 'file' UNIX utility in my project입니다.

file의 소스 코드는 configuremake이 필요합니다. 프로젝트에 어떻게 이것을 포함시킬 수 있습니까? 소스 코드의 일부를 새로운 file.cfile.h으로 잘라야합니까?

+0

"MIME 형식의 파일을 알아야합니다"-> 가능한 복제 http://stackoverflow.com/questions/9137732/how-to-generate-the-http-content-type-header -in-c/9137758, 나는 대답했다. http://stackoverflow.com/a/9137758/960195 –

+0

바이너리 이상이 필요하다. File은/etc/magic을 사용하는데, 여기에는 다양한 파일 유형에 대한 "지문"이 들어 있습니다. 가장 간단하고 간단한 방법은 단순히 popen() 또는 system()을 사용하는 것입니다. – wildplasser

+0

'popen' 또는'system'을 사용하는 것은 (항상) 아주 나쁜 생각입니다. 'libmagic' 또는'file (1)'을 호출하려면'posix_spawn'을 사용해야합니다. –

답변

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

다른 예제 사용법 : http://stackoverflow.com/questions/2105816/trying-to-use-include-compile-3rd-party-library-libmagic-c-file-ype-detect – Mat

+0

@Mat Thanks. 내가'magic_load'를 빠뜨린 것을 깨닫게했다. –

+0

답변과 의견을 보내 주셔서 감사합니다. –

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

덕분에 많이! :)

관련 문제