Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1630 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Appel de commandes UNIX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appel de commandes UNIX

n°1203451
DocGero
Posté le 20-09-2005 à 15:07:12  profilanswer
 

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.

mood
Publicité
Posté le 20-09-2005 à 15:07:12  profilanswer
 

n°1203567
Emmanuel D​elahaye
C is a sharp tool
Posté le 20-09-2005 à 16:20:47  profilanswer
 

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/
n°1203620
DocGero
Posté le 20-09-2005 à 17:09:26  profilanswer
 

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?

n°1203631
Elmoricq
Modérateur
Posté le 20-09-2005 à 17:18:19  profilanswer
 

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.

n°1203669
DocGero
Posté le 20-09-2005 à 17:43:15  profilanswer
 

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.

n°1203700
Elmoricq
Modérateur
Posté le 20-09-2005 à 18:05:50  profilanswer
 

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.

n°1203719
blackgodde​ss
vive le troll !
Posté le 20-09-2005 à 18:20:24  profilanswer
 

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


---------------
-( BlackGoddess )-
n°1203722
Elmoricq
Modérateur
Posté le 20-09-2005 à 18:23:19  profilanswer
 

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

n°1203748
Emmanuel D​elahaye
C is a sharp tool
Posté le 20-09-2005 à 18:54:10  profilanswer
 

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/
n°1204174
DocGero
Posté le 21-09-2005 à 11:52:57  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Appel de commandes UNIX

 

Sujets relatifs
Appel Procédure Stockée Access depuis WinForm VB .Net en OLEDBcommandes et indicateurs sous labview
Appel à experience rare (je suppose) !!Appel d'un script SQL dans un script SQL
Commandes BAT en JavascriptAppel à "Synchronize" qui bloque sous Delphi7 et pas sous Delphi5 ???!
Un script qui s'execute plus d'une fois a chaque appel -> solution...comment creer un script pour faire des commandes sur mon site
Plantage Excel lors d'appel fonctions perso C++-COMAppel d'un JS en Perl
Plus de sujets relatifs à : Appel de commandes UNIX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR