Voici un exemple d'utilisation de GLib/GIO pour obtenir les informations souhaitées.
#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;
}
Vous pouvez utiliser les outils disponibles sur xdg pour cela, notamment xdg-mime query
.
Pour connaître le type de fichier, par ex. un fichier index.html
vous voudriez
$ xdg-mime query filetype index.html
Cela renverra le type mime. Pour demander quelle application est associée à ce mimétisme, utilisez par exemple
$ xdg-mime query default text/html
Cela renvoie epiphany.desktop
ici, soit $APPNAME.desktop
, il est donc facile d'obtenir le nom de l'application. Si vous souhaitez simplement ouvrir le fichier dans l'application par défaut, vous pouvez bien sûr simplement exécuter
$ xdg-open index.html
qui déclencherait l'épiphanie.
Les fonctions de requête pour les ressources d'icônes ne semblent pas être disponibles dans xdg-utils
, mais vous pouvez écrire un petit script python en utilisant pyxdg qui offre également des tonnes de fonctionnalités supplémentaires.
Pour les liaisons C, vous devrez probablement consulter le code portland lié sur la page xdg.
MODIF :
Concernant libmagic
et amis, vous devrez décider de vos préférences :alors que libmagic semble être plus complet (et précis) en termes de couverture des types de fichiers, il s'en moque complètement sur les applications ou les icônes par défaut. Il ne vous fournit pas non plus d'outils pour installer des types mime supplémentaires.
Dans Qt>=4.6, il y a une nouvelle fonction pour les systèmes X11
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
Vous pouvez utiliser cette fonction. Documentation ici / (Qt 5)