Appel de commandes UNIX

Appel de commandes UNIX - C - Programmation

Marsh Posté le 20-09-2005 à 15:07:12    

Question peut-etre naive, mais pour laquelle je n'arrive pas a trouver de reponse : peut-on faire appel a une commande UNIX (par exemple ping) dans un programme C, et en exploiter la reponse?
Par avance merci.

Reply

Marsh Posté le 20-09-2005 à 15:07:12   

Reply

Marsh Posté le 20-09-2005 à 16:20:47    

DocGero a écrit :

peut-on faire appel a une commande UNIX (par exemple ping) dans un programme C, et en exploiter la reponse?


system() est standard. Pour exploiter la réponse (stdout), le plus simple est de rediriger la sortie standard vers un fichier texte et de traiter celui-ci ensuite.
 
Sous unixoïde, il y a aussi la possibilité d'utiliser les pipes... (popen() etc.). Ce n'est plus du C standard.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 20-09-2005 à 17:09:26    

ok, merci pour cette reponse rapide...
J'ai trouve la liste des system calls, mais pas de trace de 'ping' (c'est la commande dont j'ai besoin)... J'ai aussi vu qu'il etait possible d'ajouter ses propres appels, mais cette solution ne m'interesse pas car le programme devient fortement dependant de l'environnement d'execution. Peut etre vais me rabbatre sur un script shell appelant ping, puis mon programme C ... pas tres elegant... d'autres idees?

Reply

Marsh Posté le 20-09-2005 à 17:18:19    

Euh, le but de system() c'est justement d'utiliser l'environnement.
 
Si tu appelles une commande du système, par définition, tu dépends de l'environnement. Si tu ne veux pas de cette dépendance, il te reste à développer toi-même ton propre ping à partir des fonctions C.
 
D'autant plus que tu es inconstant dans ton raisonnement : tu souhaites être indépendant de ton environnement, mais tu cites l'utilisation d'un script shell comme possible solution... ce qui revient au même.

Reply

Marsh Posté le 20-09-2005 à 17:43:15    

Ok, surement je ne comprends pas toute la subtilite de l'affaire (je ne suis ni programmeur, ni expert es OS): d'ou mon post.
Ce que j'ai voulu dire - mais surement me suis je mal exprime - c'est que ping n'etant pas un appel system standard (en tout cas il n'est pas donne par 'man 2 syscalls'), et - sauf bien sur erreur de ma part- il faut l'ajouter "a la main" et editant un certain fichier entry.S, et ce sur chaque machine sur lequel le programme s'executera. En revanche, je sais que toutes les machines sur lesquelles doit s'executer le porgramme embarquent bash, donc sauront interpreter le script. Voila, peut-etre je me trompe, aussi je vous remercie pour toute lumiere sur le sujet.

Reply

Marsh Posté le 20-09-2005 à 18:05:50    

Sauf si l'administrateur lui a enlevé les droits, ping est un binaire livré en standard sur tous les Unix.
Il est d'ailleurs dans /usr/sbin par défaut, lieu où se situent les utilitaires systèmes.
 
Tu peux donc l'utiliser de manière relativement fiable avec un system("/usr/sbin/ping arguments" );
Pour fiabiliser la chose, vérifie simplement que le fichier existe et est lisible, avec stat() par exemple.
 
stat() est une fonction P90, elle devrait fonctionner sur n'importe quel Unix, par contre sous d'autres système c'est moins sûr. Ce qui, au point où tu en es (exécuter un binaire Unix), ne devrait poser aucun souci.

Reply

Marsh Posté le 20-09-2005 à 18:20:24    

system() et un appel systeme (syscall) c'est pas la meme chose hein ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 20-09-2005 à 18:23:19    

Ah oui, je viens de faire un man syscall pour voir... :sweat:
 
Clairement c'est pas ce que tu recherches, DocGero.

Reply

Marsh Posté le 20-09-2005 à 18:54:10    

DocGero a écrit :

J'ai trouve la liste des system calls, mais pas de trace de 'ping' (c'est la commande dont j'ai besoin)...


Gni ? Qui a parlé de system calls ?
Je parle de la fonction system() (man 3 system) qui s'utilise par exemple comme ça :  

system ("ping 192.168.0.1 > out.txt" );


On parle bien de langage C?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-09-2005 à 11:52:57    

Ok, j'ai compris la difference... c'est bien system() dont j'ai besoin.
En tout cas, merci pour ces reponses claires...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed