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

Linux Discussion :

probleme avec popen


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 13
    Points
    13
    Par défaut probleme avec popen
    bonjour,
    voilà j'utilise la fonction popen() pour coder sous linux une sorte de shell à distance.
    en fait, j'ai un probleme quand j'execute certaines commandes telles que ping
    je m'explique :
    quand j'execute une commande il me sort sur la sortie standard la reponse
    mais lorsque je fais un ping il ne s'arete pas (car quand on ping 10.0.0.1 par exemple il pinguera toujours)
    j'aimerais savoir comment eviter celà, parce-que quand je fai un ping, apres je ne peut plus envoyer de commandes...

    voici mon code :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    memset(tempbuf, '\0', sizeof(tempbuf));
    strncpy(tempbuf, ptr1+4, (ptr2 - (ptr1 + 4)));	
      if ((sortie = popen(tempbuf, "r")) == NULL) {
        fprintf(stderr, " Erreur popen %d \n", errno);
        exit(1);
      }
    while( fgets(ligne, sizeof(ligne), sortie) != NULL) {
      fputs(ligne,stdout);
      }
    }
    pclose(sortie);
    fflush(stdin);
    fflush(stdout);

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    bonjour,

    Je pense que tu devrais aller voir du coté du manuel de la commande PING.
    Cette commande dispose d'une option qui te permets de spécifier le nombre de paquets a envoyer ...
    -> man ping

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    je le sais bien, mais je vais dire à celui qui utilise ce shell
    "surtout ne ping pas sinon ça fonctionne plus"
    et il doit y avoir d'autres fonctions qui font pareil j'imagine autre que ping.

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut que tu puisses envoyer un kill par ton shell, tu pourrais par exemple redirigé le CTRL-C de la console vers un signal du programme , non ?

    Cela te donnerait l'occasion d'avoir un vrai shell,
    Jc

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    merci pour ta reponse, mais pourrais tu me mettre sur la voix?
    je pense au signaux SIG_INT etc..??

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par jmathon
    merci pour ta reponse, mais pourrais tu me mettre sur la voix?
    je pense au signaux SIG_INT etc..??
    Ben tu rediriges SIG_INT pour que quand tu le recois, tu l'envois simplement au programme distant.

    De son côté, lorsque tu lances un programmes (genre ping par exemple), il ne le fait pas de facon naïve mais avec un thread ou avec un fork pour pouvoir ensuite le terminer lors de la réception de SIG_INT.

    Enfin, tu dois encapsuler tes messages vers ton programme distant pour dire "client tape quelque chose", "j'ai un signal à te donner".

    Si tu utilises un fork, c'est parfait parce que tu peux simplement dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Si on a recu un signal et si on a un processus fils en cours
      Envoi signal vers lui
    Jc

Discussions similaires

  1. probleme avec popen
    Par Jayhou dans le forum C
    Réponses: 5
    Dernier message: 25/09/2007, 07h39
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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