Este es un ejemplo del uso de GLib/GIO para obtener la información que desea.
#include <gio/gio.h>
#include <stdio.h>
int
main (int argc, char **argv)
{
g_thread_init (NULL);
g_type_init ();
if (argc < 2)
return -1;
GError *error;
GFile *file = g_file_new_for_path (argv[1]);
GFileInfo *file_info = g_file_query_info (file,
"standard::*",
0,
NULL,
&error);
const char *content_type = g_file_info_get_content_type (file_info);
char *desc = g_content_type_get_description (content_type);
GAppInfo *app_info = g_app_info_get_default_for_type (
content_type,
FALSE);
/* you'd have to use g_loadable_icon_load to get the actual icon */
GIcon *icon = g_file_info_get_icon (file_info);
printf ("File: %s\nDescription: %s\nDefault Application: %s\n",
argv[1],
desc,
g_app_info_get_executable (app_info));
return 0;
}
Puede usar las herramientas disponibles de xdg para eso, en particular xdg-mime query
.
Para averiguar el tipo de archivo de, p. un archivo index.html
lo harías
$ xdg-mime query filetype index.html
Esto devolverá el tipo MIME. Para consultar qué aplicación está asociada con ese uso de mimetye, por ejemplo,
$ xdg-mime query default text/html
Esto devuelve epiphany.desktop
aquí, es decir, $APPNAME.desktop
, por lo que es fácil obtener el nombre de la aplicación. Si solo desea abrir el archivo en la aplicación predeterminada, puede, por supuesto, simplemente ejecutar
$ xdg-open index.html
lo que encendería la epifanía.
Las funciones de consulta de recursos de iconos no parecen estar disponibles en xdg-utils
, pero podría escribir un pequeño script de python usando pyxdg que también ofrece toneladas de funcionalidad adicional.
Para los enlaces C, probablemente necesitará echar un vistazo al código de Portland vinculado en la página xdg.
EDITAR:
Sobre libmagic
y amigos, deberán decidir sus preferencias:mientras que libmagic parece ser más completa (y precisa) en términos de cobertura para tipos de archivo, no le importa en absoluto sobre aplicaciones o iconos predeterminados. Tampoco le proporciona herramientas para instalar mimetypes adicionales.
En Qt>=4.6, hay una nueva función para sistemas X11
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
Puede utilizar esta función. Documentación aquí / (Qt 5)