{"id":2762,"date":"2011-02-26T16:25:08","date_gmt":"2011-02-26T23:25:08","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=2762"},"modified":"2011-02-27T05:15:54","modified_gmt":"2011-02-27T12:15:54","slug":"%c2%bfcomo-saber-el-tipo-de-un-archivo-i","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2011\/02\/26\/%c2%bfcomo-saber-el-tipo-de-un-archivo-i\/","title":{"rendered":"\u00bfComo saber el tipo de un archivo? (I)"},"content":{"rendered":"<p>Por alguna raz\u00f3n, <a href=\"http:\/\/kodegeek.com\/blog\/2007\/09\/22\/echando-codigo-\u00bfcomo-saber-de-que-tipo-es-un-archivo-desde-java\">este articulo viejo<\/a> ha tenido algo de tr\u00e1fico en los \u00faltimos d\u00edas. Me d\u00ed cuenta que la idea de usar Java y JNI nunca se materializ\u00f3, s\u00f3lo d\u00ed unas pistas.<\/p>\n<p>Una forma de hacer esto es llamando a la librer\u00eda &#8216;magic&#8217;. Magic viene pr\u00e1cticamente en cualquier sistema operativo que se parezca a UNIX que se respete, como BSD, OSX y por supuesto Linux.<\/p>\n<p>Si usted llama a la p\u00e1gina man (man 3 libmagic) all\u00ed encontrar\u00e1 suficiente informaci\u00f3n. Por ejemplo, aqu\u00ed les muestro un peque\u00f1o programa que hice en C el cual detecta el tipo de archivo que usted le pase por la l\u00ednea de comandos:<\/p>\n<pre lang=\"c\">#include \r\n#include \r\n\r\n\/*\r\n * Program that shows how to use the magic library to figure out the type of a file\r\n * @author Jose V Nunez (josevnz@kodegeek.com)\r\n * License: BSD\r\n *\/\r\nint main(int argc, char ** argv) {\r\n\r\n        if (argc == 1) {\r\n                printf(\"[ERROR]: Please provide the file name to check and try again!\\n\");\r\n                return 1;\r\n        }\r\n\r\n        \/\/ See manpage libmagic for details on what this flags mean\r\n        int flags = MAGIC_SYMLINK|MAGIC_COMPRESS|MAGIC_CONTINUE|MAGIC_PRESERVE_ATIME|MAGIC_ERROR;\r\n\r\n        magic_t cookie = magic_open(flags);\r\n        if (cookie == NULL) {\r\n                printf(\"There was a problem opening the magic library!\\n\");\r\n                return 1;\r\n        }\r\n        int status = magic_load(cookie, NULL);\r\n        if (status != 0) {\r\n                printf(\"Unable to load magic default database!, %s\\n\", magic_error(cookie));\r\n                magic_close(cookie);\r\n                return 1;\r\n        }\r\n\r\n        const char * file_details =  magic_file(cookie, argv[1]);\r\n        printf(\"Type for file: %s is %s\\n\", argv[1], file_details);\r\n\r\n        magic_close(cookie);\r\n        return 0;\r\n}\r\n<\/pre>\n<p>Para compilarlo les dejo un archivo Makefile:<\/p>\n<pre lang=\"Makefile\">CPPFLAGS += -O2 -L\/Users\/Shared\/lib -I\/Users\/Shared\/include -lmagic\r\nall: magic.c\r\n        $(CC) $(CPPFLAGS) magic.c -o magic\r\n<\/pre>\n<p>Y finalmente como se corre:<\/p>\n<pre lang=\"bash\">auyan:c josevnz$ make\r\ncc -O2 -L\/Users\/Shared\/lib -I\/Users\/Shared\/include -lmagic magic.c -o magic\r\nauyan:c josevnz$ .\/magic \/Users\/josevnz\/CTX.DAT\r\nMime type for file: \/Users\/josevnz\/CTX.DAT is Java serialization data, version 5\r\nauyan:c josevnz$ \r\n<\/pre>\n<p>En la siguiente entrada las prometo como hacer esto desde Java (pista, vamos a utilizar JNI).<\/p>\n<p>&#8211;Jos\u00e9<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por alguna raz\u00f3n, este articulo viejo ha tenido algo de tr\u00e1fico en los \u00faltimos d\u00edas. Me d\u00ed cuenta que la idea de usar Java y JNI nunca se materializ\u00f3, s\u00f3lo d\u00ed unas pistas. Una forma de hacer esto es llamando a la librer\u00eda &#8216;magic&#8217;. Magic viene pr\u00e1cticamente en cualquier sistema operativo que se parezca a <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2011\/02\/26\/%c2%bfcomo-saber-el-tipo-de-un-archivo-i\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[640,9,641,12,438],"tags":[243,219,757,643,218,642,644],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2762"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=2762"}],"version-history":[{"count":14,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2762\/revisions"}],"predecessor-version":[{"id":2781,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/2762\/revisions\/2781"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=2762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=2762"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=2762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}