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 :

Aide sur ce probleme de popen


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 44
    Points
    44
    Par défaut Aide sur ce probleme de popen
    bonjour
    j'ai programmé un simple code utilisant deux popen mai le problème que l'un s'exécute correctement et l'autre nom voici le code et le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <cstring>  
     
     
    int main(int argc, char* argv[])
    {
     
       std::string comm;
       comm = "ipsumdump -r ";
       comm +=argv[1]; 
       comm +=" --no-headers -f 'tcp[13] == 2' -sSdD >FS.txt";  
       size_t size = comm.size() + 1;
       char * buffer = new char[ size ];
       strncpy( buffer, comm.c_str(), size );
       FILE *flux = popen(buffer,"r");
            pclose(flux);
       std::cout<<"traitemnt fini FS.txt"<<std::endl;
       std::cout<<"traitemnt debut FSA.txt"<<std::endl;
       comm = "ipsumdump -r ";
       comm +=argv[1]; 
       comm +=" --no-headers -f 'tcp[13] == 18' -dDsS >FSA.txt";
       size_t size1 = comm.size() + 1;
       char * buffer1 = new char[ size ];
       strncpy( buffer1, comm.c_str(), size1 );
       FILE *flux1 = popen(buffer1,"r");
       pclose(flux1);
     
    return 1;
    }
    voici après compilation et exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    100% |******************************************************************************************************************************|   184MB    00:14    
    traitemnt fini FS.txt
    traitemnt debut FSA.txt
    *** glibc detected *** ./Test: malloc(): memory corruption: 0x09d58060 ***
    ======= Backtrace: =========
    /lib/libc.so.6[0x7b0006]
    /lib/libc.so.6(__libc_malloc+0x95)[0x7b1755]
    /lib/libc.so.6(popen+0x21)[0x79f1c1]
    ./Test[0x8048af1]
    /lib/libc.so.6(__libc_start_main+0xe5)[0x7546d5]
    ./Test[0x8048861]
    ======= Memory map: ========
    00110000-00111000 r-xp 00110000 00:00 0          [vdso]
    00120000-00207000 r-xp 00000000 fd:00 730611     /usr/lib/libstdc++.so.6.0.10
    00207000-0020b000 r--p 000e6000 fd:00 730611     /usr/lib/libstdc++.so.6.0.10
    0020b000-0020d000 rw-p 000ea000 fd:00 730611     /usr/lib/libstdc++.so.6.0.10
    0020d000-00212000 rw-p 0020d000 00:00 0 
    00719000-00739000 r-xp 00000000 fd:00 1207236    /lib/ld-2.9.so
    0073a000-0073b000 r--p 00020000 fd:00 1207236    /lib/ld-2.9.so
    0073b000-0073c000 rw-p 00021000 fd:00 1207236    /lib/ld-2.9.so
    0073e000-008ac000 r-xp 00000000 fd:00 1207237    /lib/libc-2.9.so
    008ac000-008ae000 r--p 0016e000 fd:00 1207237    /lib/libc-2.9.so
    008ae000-008af000 rw-p 00170000 fd:00 1207237    /lib/libc-2.9.so
    008af000-008b2000 rw-p 008af000 00:00 0 
    008b4000-008db000 r-xp 00000000 fd:00 1207243    /lib/libm-2.9.so
    008db000-008dc000 r--p 00026000 fd:00 1207243    /lib/libm-2.9.so
    008dc000-008dd000 rw-p 00027000 fd:00 1207243    /lib/libm-2.9.so
    00dca000-00dd7000 r-xp 00000000 fd:00 1207250    /lib/libgcc_s-4.3.2-20081105.so.1
    00dd7000-00dd8000 rw-p 0000c000 fd:00 1207250    /lib/libgcc_s-4.3.2-20081105.so.1
    08048000-08049000 r-xp 00000000 fd:00 213082     /home/anis/BloomFilter_-_CPP/Test
    08049000-0804a000 rw-p 00000000 fd:00 213082     /home/anis/BloomFilter_-_CPP/Test
    09d58000-09d79000 rw-p 09d58000 00:00 0          [heap]
    b7f00000-b7f21000 rw-p b7f00000 00:00 0 
    b7f21000-b8000000 ---p b7f21000 00:00 0 
    b80c5000-b80c8000 rw-p b80c5000 00:00 0 
    b80e3000-b80e4000 rw-p b80e3000 00:00 0 
    bfece000-bfee3000 rw-p bffeb000 00:00 0          [stack]
    Aborted

  2. #2
    Membre régulier Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par selmani300 Voir le message
    bonjour
    j'ai programmé un simple code utilisant deux popen mai le problème que l'un s'exécute correctement et l'autre nom voici le code et le message d'erreur
    Et si tu l'éxecutes avec ou sans un argument de la ligne de commande? Pour moi, il plante si je l'execute sans argument, parce que argv[1] n'est pas valide, et tu ne verifies pas si l'utilisateur a donné une argument.

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par cynique Voir le message
    Et si tu l'éxecutes avec ou sans un argument de la ligne de commande? Pour moi, il plante si je l'execute sans argument, parce que argv[1] n'est pas valide, et tu ne verifies pas si l'utilisateur a donné une argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       char * buffer1 = new char[ size1 ]
    j'ai corriger le problemme il manque un 1 pour size ce n'est pas size maai c'est un size1 faute de copier coller

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Au passage
    1. tu inclues des en-tête exclusivement C++
    2. Tu manipule des flux exclusivement C++ pour l'affichage courent
    Pourquoi ne pas aller plus loin et manipuler tes fichiers avec les flux "qui vont bien" dans ce cas (fstream), et manipuler tes chaines de caractères avec la classe propre au C++ std::string

    Ne crois tu pas que tu te faciliterait énormément la vie

    En outre, vérifie toujours le nombre d'arguments passés à main, si tu décide de les utiliser

    Au passage, boost::program_option pourrait te venir à point nommé, non
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PC fixe] vraiment besoin d'aide sur un probleme de PC de bureau
    Par NeverDead dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 29/09/2012, 13h45
  2. Réponses: 2
    Dernier message: 30/03/2010, 14h37
  3. aide sur ce le probleme de segmentation fault
    Par selmani300 dans le forum C++
    Réponses: 3
    Dernier message: 26/03/2009, 07h48
  4. Demande d'aide pour un problème de code source sur devC++
    Par Rickantonais dans le forum Débuter
    Réponses: 28
    Dernier message: 01/08/2007, 14h09
  5. [Conception] un peu d aide suite un probleme sur un formulaire
    Par jojojojo57 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/05/2007, 18h48

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