2010-03-04 6 views
4

En essayant de faire une méthode personnalisée, quelle est la cause de retourner un char avec la sortie du système.C Programmation linux, lire les entrées du système comme ping ou ls -l

le pseudocode comme ceci.

char *my_Out(char *in){ 
    in = system ("ping %s",in); 
    return in; 
} 

merci pour l'aide.

+3

Si vous inclus '' (qui déclare 'système()'), vous auriez su qu'il retourne un entier et non un char * ''. –

Répondre

5

Vous pouvez utiliser popen, qui vous renvoie un flux dont vous pouvez lire la sortie. En lisant jusqu'à la fin du fichier, dans une chaîne (probablement une chaîne qui se développe dynamiquement selon les besoins), vous pouvez implémenter ce que vous demandez.

+2

Cependant, si vous recherchez l'une des informations contenues dans un 'ls -l', disons, vous pouvez probablement l'obtenir beaucoup plus facilement avec une fonction de bibliothèque (' stat'). – Cascabel

+0

@Jefromi: +1 pour votre idée, même si un petit nit: 'stat' est généralement un appel système, pas une fonction de bibliothèque. :-P –

+3

Chris: 'stat' est généralement une fonction de la bibliothèque * wrapping * un appel système (celui qui vit par le nit ...) – caf

2

Quelques choses

  1. system() n'est pas une fonction printf. Vous devrez utiliser sprintf() pour créer votre argument avant.
  2. La valeur de retour de system() est un int, un non char
  3. Ce n'est généralement pas une bonne idée d'écraser les paramètres de fonction.

Qu'est-ce que vous essayez de faire? Il semble que toute cette fonction soit exécutée ping (qui, sans l'argument -c, ne finira jamais sous linux).

+1

Je ne suis pas d'accord avec le point 3. Bien que cela puisse être inhabituel et briser votre style, il n'y a rien de mal à cela. –

1
Duplicate the stdout to some other file descriptor by using dup2.After the execution of the command read all the lines from the file using that file descriptor and return it. 
Questions connexes