Segfaultsur une fonction pour lire des commandes systemes
Bonjour, je me suis fais deux fonctions qui m'aide a lire les fonctions systémes sur une machine linux :
la premiére fonction donne la taille du résultat d'une commande et l'autre fonction enegistre dans un char, ce qu'il devrait s'afficher dans le résultat d'une ligne de commande
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include <stdio.h>
#include <Eina.h>
/**
* \fn lecture_taille_chaine( char *cmd)
* \brief Fonction qui donne le nombre de charactére du résultat d'une CMD linux
*
* \param *cmd Chaîne comportant la ligne de commande linux
* \return int le nombre de charactére dans le résultat de la CMD linux
*/
int lecture_taille_chaine( char *cmd)
{
size_t l = 0;
FILE * pp;
char buf[256];
char *dst;
int t=0;
if ((pp = popen(cmd, "r")) == NULL)
{
perror("popen");
exit(EXIT_FAILURE);
}
while (fgets(buf, sizeof buf, pp))
{
l = strlen(dst) + strlen(buf) + 1;
dst = calloc(l, sizeof(char*));
t = t + l;
}
pclose(pp);
return t;
}
/**
* \fn lire_data_CMD_Linux( char *cmd,int taille)
* \brief Fonction de lecture de ligne de commande linux
*
* \param *cmd Chaîne comportant la ligne de commande linux
* taille je sais pas
* \return une chaine de carractére avec le résultat de ligne de commande linux.
*/
char * lire_data_CMD_Linux( char *cmd)
{
size_t l;
FILE * pp;
char buf[256];
char *dst;
int taille = lecture_taille_chaine(cmd);
if ((pp = popen(cmd, "r")) == NULL)
{
perror("popen");
exit(EXIT_FAILURE);
}
l = taille + 1;
//dst = malloc(l);
dst = calloc(l, sizeof(char*));
while (fgets(buf, sizeof buf, pp))
{
eina_strlcat(dst, buf, taille);
}
pclose(pp);
return dst;
}
int main()
{
printf("df = %s\n",lire_data_CMD_Linux("df"));
printf("ls = %s\n",lire_data_CMD_Linux("ls"));
return 0;
} |
Le code donne une erreur de segmentation, j'ai essaie gdb, mais j'ai cette erreur :
Code:
1 2 3 4 5 6
|
[Thread debugging using libthread_db enabled]
Program received signal SIGSEGV, Segmentation fault.
0x001ce7a0 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb) |
et la je ne sais pas quoi faire pour trouver ce qui cloche dans le programme.
merci d'avance