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;
} |
Partager