A real nice article that go me started with using libmagic or magic.h.
<code>#include <stdio.h>
#include <magic.h>
int
main(
void
)
{
char
*actual_file =
"/file/you/want.yay"
;
const
char
*magic_full;
magic_t magic_cookie;
/*MAGIC_MIME tells magic to return a mime of the file, but you can specify different things*/
magic_cookie = magic_open(MAGIC_MIME);
if
(magic_cookie == NULL) {
printf
(
"unable to initialize magic library\n"
);
return
1;
}
printf
(
"Loading default magic database\n"
);
if
(magic_load(magic_cookie, NULL) != 0) {
printf
(
"cannot load magic database - %s\n"
, magic_error(magic_cookie));
magic_close(magic_cookie);
return
1;
}
magic_full = magic_file(magic_cookie, actual_file);
printf
(
"%s\n"
, magic_full);
magic_close(magic_cookie);
return
0;
}
</code>
To compile it do: "gcc magic_test.c -o magics -lmagic". Furthermore make sure the libmagic library is installed. "apt-get install libmagic-dev" should do it if you're using a machine with debian/ubuntu.
Below is my magic_buff testing:
<code>
#include <stdio.h>
#include <magic.h>
int main(void)
{
printf("In main()\n");
char *actual_file = "hello.c";
const char *magic_full;
magic_t magic_cookie;
int BUF_SIZE = 8388608; // 2**23
char buf[BUF_SIZE];
magic_cookie = magic_open(MAGIC_MIME);
if (magic_cookie == NULL)
{
printf("Unable to initialize magic library\n");
return 1;
}
if (magic_load(magic_cookie, NULL) != 0)
{
printf("Cannot load magic database - %s\n", magic_error(magic_cookie));
magic_close(magic_cookie);
return 1;
}
//magic_full = magic_file(magic_cookie, actual_file);
magic_full = magic_buffer(magic_cookie, (const void *) &buf, BUF_SIZE);
printf("%s\n", magic_full);
magic_close(magic_cookie);
return 0;
}
</code>
No comments:
Post a Comment