Salut à tous,
Alors, mon environnement:
- RHEL 5.3, gcc-4.1.2, gtk+ 2.10
Voilà ce que je veux faire: lancer un mount, lire le résultat et l'afficher à l'écran.
Chose qui est censé être simple, mais là je ne comprend pas et je n'arrive pas à voir d'où viens le problème.
Voilà le petit bout de code: (simplifié avec de gros tableau )
Code :
- gchar * t_mount_cmd = g_strdup_printf("mount %s %s", t_device, MOUNT_POINT);
- FILE * t_file = popen(t_mount_cmd, "r" );
- gchar t_buffer[500] = { 0 };
- gchar t_error[65534] = { 0 };
-
- while (fgets(t_buffer, 500, t_file) != NULL)
- strncat(t_error, t_buffer, 65534);
- g_print("GOT: %s\n", t_error);
- pclose(t_file);
|
Voilà, or sur mon terminal j'ai ça qui s'affiche:
Citation :
ERROR: ld.so: object 'prof_agent.so' from LD_PRELOAD cannot be preloaded: ignored.
mount: seul l'usager ROOT peut faire cela
GOT:
|
Donc, moralité: t_error est vide (je GOT rien...). Donc, popen, ben je sais pas où qu'il passe le pipe, car t_error est vide...
Si quelqu'un peut m'aider !!!!! Car là je comprend plus rien.
Merci,
Willits
Edit: Résolu tout seul. (A chaque fois que je poste un topic je trouve 10 min après la solution).
mount retourne tout ces messages dans stderr (et pas stdout), donc pour récupérer stderr avec popen, il faut ajouter "2>&1" après la commande mount.
Celà donne:
gchar * t_mount_cmd = g_strdup_printf("mount %s %s 2>&1", t_device, MOUNT_POINT);
En espérant que ça aide quelqu'un.
Willits
Message édité par Willits le 18-09-2009 à 15:29:00