IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Plantage à l'appel de system()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 49
    Par défaut Plantage à l'appel de system()
    Bonjour,

    Je viens vous exposer un problème que je n'arrive pas à résoudre.

    Je travaille, pour mes études, sur un projet qui demande de récupèrer les temps de ping vers différentes IP.
    Pour cela, j'utilise une commande system("ping -nombreDePing IP >fichierTemporaire"). Puis je vais récupérer les données qui m’intéresse au sein du fichier.

    Pour pouvoir effectuer plusieurs mesures en même temps, le programme lance un thread par mesure, et chaque thread appel donc system() avec les données voulues.

    Mais voilà, l'appel system() ne marche plus, plantage direct de l'application à ce niveau là. Même en faisant un appel vide ( system(""); ) ca ne passe pas. Et pas d'erreur à la compilation. stdlib et stdio sont bien ajoutés au .c

    Bref, je ne comprend pas.

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    utilise plutot une fonction de la famille exec (par exemple execlp, execve ...). Le problème de system() c'est qu'il instancie un shell, lance la commade et ferme ledit shell. C'est assez lourd comme opération. Cumulé au fait que t'en balance un par thread et que tu fais je sais pas combien de threads...

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu n'as pas un morceau de code qui montre le problème ? Ton post est trop vague pour qu'on puisse t'aider.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Bonjour,

    Sans avoir le source, c'est difficile de savoir d'où vient le problème.
    Mais, ça me semble pas terrible ton histoire de system avec redirection dans un fichier en multi-thread. J'imagine que ton fichier est unique par thread (à priori c'est le cas , puisque tu fait ">" et non ">>"), sinon faut prévoir des mécanismes de protection.

    Pourquoi ne pas implémenter toi même le ping. Il y a plein d'exemple de code , par exemple sur http://www.ping127001.com/pingpage.htm, il y a le code source du ping original : http://www.ping127001.com/pingpage/ping.text qui marche au poil.

    Le source est dans le domaine public, il faut juste que tu remplace l'appel au main par un wrapper de cette fonction ou que tu fasses une lib.

    En espérant t'avoir aidé .

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Je viens de me rendre compte d'un truc, l'appel system n'est pas bloquant (il me semble), c'est à dire qu'il n'attend pas la fin d’exécution de la commande, simplement il retourne si la fonction a bien été lancée.
    Dans ce cas comment sais-tu quand lire ton fichier, c'est à dire comment sais-tu quand ton ping c'est terminé ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par chicorico Voir le message
    Je viens de me rendre compte d'un truc, l'appel system n'est pas bloquant (il me semble),
    Si. En tout cas il est censé l'être :

    Citation Envoyé par man system
    DESCRIPTION

    La fonction system() exécute la commande indiquée dans command en appelant /bin/sh -c command, et revient après l'exécution complète de la commande. Durant cette exécution, le signal SIGCHLD est bloqué, et les signaux SIGINT et SIGQUIT sont ignorés.

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par ouvreboite Voir le message
    Mais voilà, l'appel system() ne marche plus, plantage direct de l'application à ce niveau là. Même en faisant un appel vide ( system(""); ) ca ne passe pas.
    Quel est exactement le plantage ? Tu as un core genere ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

Discussions similaires

  1. Réponses: 19
    Dernier message: 10/08/2012, 11h45
  2. [GDI+] Plantage à l'appel de GetImageEncodersSize
    Par gedeon555 dans le forum C++
    Réponses: 2
    Dernier message: 25/12/2007, 20h48
  3. Yes::Engine, plantage sur appel openGL
    Par deadalnix dans le forum OpenGL
    Réponses: 15
    Dernier message: 20/08/2007, 16h10
  4. [System] Gerer la fermeture due à un plantage
    Par Alec6 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 15/10/2004, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo