Ecco un esempio di utilizzo di GLib/GIO per ottenere le informazioni desiderate.
#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;
}
Puoi utilizzare gli strumenti disponibili da xdg per questo, in particolare xdg-mime query
.
Per scoprire il tipo di file ad es. un file index.html
lo faresti
$ xdg-mime query filetype index.html
Questo restituirà il tipo mime. Per interrogare quale applicazione è associata a quel mimetye usa ad es.
$ xdg-mime query default text/html
Questo restituisce epiphany.desktop
qui, cioè $APPNAME.desktop
, quindi è facile ricavarne il nome dell'applicazione. Se desideri semplicemente aprire il file nell'app predefinita, puoi ovviamente eseguire
$ xdg-open index.html
che accenderebbe l'epifania.
Le funzioni di query per le risorse delle icone non sembrano essere disponibili in xdg-utils
, ma potresti scrivere un piccolo script Python usando pyxdg che offre anche tantissime funzionalità aggiuntive.
Per i collegamenti C probabilmente dovrai dare un'occhiata al codice portland collegato alla pagina xdg.
MODIFICA:
A proposito di libmagic
e amici, dovrai decidere le tue preferenze:mentre libmagic sembra essere più completo (e accurato) in termini di copertura per i tipi di file, non gli interessa affatto sulle applicazioni o icone predefinite. Inoltre, non ti fornisce gli strumenti per installare tipi mime aggiuntivi.
In Qt>=4.6, c'è una nuova funzione per i sistemi X11
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
Puoi usare questa funzione. Documentazione qui / (Qt 5)