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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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