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 :

Creation de fichier log


Sujet :

C++

  1. #1
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut Creation de fichier log
    Bonjour,

    je suis occupé avec un projet scolaire et l'on doit écrire des classes. Le prof nous à donc fournis des fichiers qui permettent de tester ses classes. Plutot que de m'amuser à mettre en commentaire à chaque fois des partie du prof pour pouvoir tester des partie de mes classes, j'exécute tout d'un coup.
    J'ai donc mis des cout, cerr et clog un peu partout dans mes classes.

    Je cherchais donc le moyen de mettre les clog dans un fichier

    chose que j'ai réussi à faire grace à un code source
    Code C++ : 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
     
    class redirecter
    {
    public:
        redirecter(std::ostream & dst, std::ostream & src)
            : src(src), sbuf(src.rdbuf(dst.rdbuf())) {}
        ~redirecter() { src.rdbuf(sbuf); }
    private:
        std::ostream & src;
        std::streambuf * const sbuf;
    };
     
    int main()
    {
        std::ofstream log("hello-world.log");
        redirecter redirect(log, std::clog);
     
    /* Rajout de ma part
        pid_t pid;
     
        pid = fork();
        if(pid == 0){
            execv ("Test1", NULL);
        }
    */
     
        return 0;
    }

    Ce que je cherches à faire c'est créer un fichier main qui appel les fichiers du prof et que tout les clog s'écrivent du coup la aussi dans le fichier.
    Mais la je suis bloqué. Le probleme est que lorsque j'execute le main il appel bien mon fichier Test1 mais les clog du coup s'affichent à l'écran

    Comment résoudre cela?

    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut Utilisez les fonction popen()/pclose()
    Bonjour Sparky95,

    C'est mieux d'utiliser les fonctions popen()/pclose() ici, car ces sont plus simples que les fonctions fork()/vfork() et plus utiles pour votre but.
    Il faut que j'écrive les explications siffisantes, mais ce sera ma dette linguistique. J'ai simplement ajouté queque chose à votre code:

    https://www.jeremymorgan.com/tutoria...-command-in-c/
    https://stackoverflow.com/questions/...ecuted-to-cout

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    //main.cpp
     
    #include <string>
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstdio>
    #include <array>
     
    class redirecter
    {
        public:
     
        redirecter(std::ostream & dst, std::ostream & src)
            : src(src), sbuf(src.rdbuf(dst.rdbuf())) {}
        ~redirecter() { src.rdbuf(sbuf); }
     
        private:
     
        std::ostream & src;
        std::streambuf * const sbuf;
    };
     
    int main()
    {
        std::ofstream log("hello-world.log");
        redirecter redirect(log, std::clog);
     
        std::clog << "Main started" << std::endl;
     
        std::string command("./test1");
        command.append(" 2>&1");
     
        std::array<char, 128> buffer;
        std::string result;
     
        std::clog << "Opening reading pipe" << std::endl;
     
        FILE* pipe = popen(command.c_str(), "r");
        if (!pipe)
        {
            std::cerr << "Couldn't start command." << std::endl;
            return 0;
        }
     
        while (fgets(buffer.data(), 128, pipe) != NULL)
        {
            std::clog << "Reading..." << std::endl;
            result += buffer.data();
        }
        auto returnCode = pclose(pipe);
     
        std::clog << "result = " << result << std::endl;
        std::clog << "resultCode = " << returnCode << std::endl;
     
        std::clog << "Main is exiting" << std::endl;
     
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //test1.cpp
     
    #include <iostream>
     
    int main()
    {
        std::clog << "C'est Test1" << std::endl;
     
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    g++ -o test1 test1.cpp
    g++ -o main main.cpp -std=c++11

  3. #3
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    bonjour,
    à priori c'est ce que je cherches je n'ai pas le temps de le tester maintenant mais merci beaucoup pour la réponse super

  4. #4
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Bonjour,
    Je déterres cette réponse car ce n'est pas tout à fait ce que je cherchais au final.
    les clog se mettent bien dans le fichier hello-world.log
    le soucis est que si je fais des cout, eux aussi se rajoutent dans le fichier et de plus ne s'affichent pas à l'écran
    https://prnt.sc/p7yvmo
    Merci

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Sparky95 Voir le message
    des cout, eux aussi se rajoutent dans le fichier
    Bonjour,
    Dans ce cas c'est plus facile d'utiliser la redirection de stderr vers le fichier log et sans objet de class "redirector":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //test1.cpp
    #include <iostream>
     
    int main()
    {
        std::cout << "(vers cout) C'est Test1" << std::endl;
        std::clog << "(vers clog) C'est Test1" << std::endl;
     
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //main.cpp
     
        //std::ofstream log("hello-world.log");
        //redirecter redirect(log, std::clog);
     
       ...
     
        //command.append(" 2>&1");
     
       ...
     
        std::cout << "(vers cout main) result = \n" << result << std::endl;
    La redirection de stderr vers le fichier log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./main 2> hello-world.log
    C'est pour Linux. Quant à Windows, il vaut mieux faire un "thread" séparé pour "logging".
    Il y a un autre moyen pour Linux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    { ./test1; ./test2; ./test3; } 2>hello-world.log
    Mais c'est plus bash que c++ (attention aux espaces).

  6. #6
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Nickel c'est plus ce que je cherchais mis par par évidemment que je doivent le faire via bash :/
    N'y a-t-il pas moyen que la partie 2> hello_world.log soit mis dans le code du main? :s

    J'ai essayé comme ça command.append(" 2> hello-world.log"); mais cela ne fonctionnes pas

    AJOUT => je viens de capter pq cela ne fonctionnes pas :p par contre je j'ai pas encore d'idée de comment le faire mise à part peut-être.
    avec un main paramètre
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int n, char *params[]){
        if(params[0] == NULL){
            std::string command("./main 2> ");
            command.append(" 2> hello-world.log");
        }else{
            //le code
        }
        return 0;
    }

    Voila au final comment je l'ai fais =>https://prnt.sc/p95mvk
    J'imagines qu'il y à des manières plus propres de le faire mais bon cela fonctionnes

  7. #7
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Hello petit soucis supplémentaire rencontré,
    dans le cas ou j'ai une entrée clavier je me retrouves bloqué car pas de message

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream> 
    int main()
    {
        int val; 
        std::clog << "C'est un clog" << std::endl;
        std::cout << "C'est un cout" << std::endl;
        std::cout << "C'est un cerr" << std::endl;
        std::cin >> val;
        std::cout << val;
        return 0;
    }
    je me retrouves du coup avec une attente clavier mais je n'ai pas eu de cout affiché avant :/
    j'ai compris le pq de cela mais comment puis-je du coup résoudre ça? :s

    Ajout: Voici ce que j'ai essayé dans le main
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int c;
    while ((char c = fgetc(pipe)) && feof(pipe)){    printf("%c", c);
    }
    au lieu de du fgets mais sans succès.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut Bonjour
    Bonjour,
    Le "linux pipe" est unidirectionnel donc ce n'est pas possible de saisir quelque chose vers le processus subordonné. Redirection de stderr est un service de shell(bash), alors on doit utilise son propre exemplaire de bash pour chaque processus.
    Il y a une fonction convenable, c'est system();

    J'ai refait et ajouté queque chose afin de faire ça un peu plus intéressant:
    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
     
    //test1.cpp
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/syscall.h>
     
    #include <iostream>
     
    int main()
    {
        int val;
        std::clog << "C'est un clog de test1" << std::endl;
        std::cerr << "C'est un cerr de test1" << std::endl;
        std::cout << "C'est un cout de test1 parent pid = " << getppid() << " pid  = " << getpid() << " tid = " << syscall(SYS_gettid) << std::endl << "Saisissez val: ";
        std::cin >> val;
        std::cout << "val de test1 = " << val << std::endl;
        return 0;
    }
    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
     
    #include <iostream>
    #include <deque>
     
    #include <cstdlib>
    #include <cstdio>
     
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/syscall.h>
     
    int main()
    {
        std::cout << "Main() ppid = " << getppid() << " pid = " << getpid() << " tid = " << syscall(SYS_gettid) << std::endl;
     
        std::deque<std::string> prog;
        prog.push_back("./test1");
        prog.push_back("./test2");
     
        std::deque<std::string>::iterator it = prog.begin();
     
        while (it != prog.end())
        {
            std::string command = *it++;
            command.append(" 2>> hello-world.log"); // >> attention !!!
            system(static_cast<const char *>(command.c_str()));
        }
     
        std::cout << "Main() pid = " << getpid() << " tid = " << syscall(SYS_gettid) << std::endl;
     
        return 0;
    }
    Mais cela drôle comme ressemble à un travail avec un client sans cahier des charges : un souci, un autre souci et après un peu plus des soucis lol.
    Je pense que ce serait utile pour vous d'étudier le contrôle de processus dans linux.

  9. #9
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par EliasF00F Voir le message
    Mais cela drôle comme ressemble à un travail avec un client sans cahier des charges : un souci, un autre souci et après un peu plus des soucis lol.
    Je pense que ce serait utile pour vous d'étudier le contrôle de processus dans linux.
    En fait ce qu'il se passes c'est que j'ai un cours ou je dois créer des classes et j'ai des jeux de test pour les tester.
    J'ai donc ajouté des clog un peu partout dans mes classes ce qui me permets de savoir par ou je passes en cas de debug/crash,...
    Il y à dans les jeux de test des cout, car tout est sous terminal, et les cerr c'est en cas de débug que je les utilises car pas de buffer.
    Je me suis donc dis pourquoi ne pas créer un main qui appel à chaque fois la redirection de flux plutot que de le rajouter à chaque fois dans les jeux de test 1 par 1.

    voila l'idée de cahier des charges que je voulais faire.

    juste encore 2 petite modif, pourrais tu mettre un peu de commentaires dans le main ainsi que faire en sort que les cerr s'affichent à l'écran?

    Et pourquoi ne mets tu pas les using std?

    Ajout: je pense qu'il n'y a pas besoin de commentaires tout compte faire. Je penses avoir compris.
    Seule certains éléments me sont encore inconnu mais je vais les recherchés sur internet.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut
    En principe, il vaut mieux developper une classe spécialisée pour déboguer et enregistrer les logs avec touts les services possibles, i.e. "thread-safe", "atomique", "debuglevel" etc.
    Pourtant dans votre cas les objets std::clog et std::cerr correspondent bien au but. Mais de l'autre côté ces deux sont connectés au flux stderr de linux donc ce n'est pas possible de les séparer au niveau de bash pour afficher l'un et enregister dans le fichier log de l'autre. Par conséquent, il faut ajouter une marque dans une de ces objets, par exemple, "ERROR:" en sdt::cerr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //testX.cpp
     
        ...
        std::cerr << "ERROR: C'est un cerr de testX" << std::endl;
        ...
    Et on peut les destinguer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //main.cpp
     
        ...
        command.append(" 2> .tmp && cat .tmp |grep ERROR && cat .tmp|grep -v ERROR >> hello-world.log && rm .tmp"); // on utilise un fichier temporel .tmp
        ...
    Quant à "using namespace", je ne maîtrise pas bien C++ donc je pense qu'il me faut respecter des règles:
    https://google.github.io/styleguide/...tml#Namespaces

  11. #11
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    en faisant comme ça, si il n'y à pas de cerr dans le code rien ne s'enregistres dans le fichier :/

    2> .tmp && cat .tmp |grep ERROR && cat .tmp|grep -v ERROR >> hello-world.log && rm .tmp => si je comprends bien

    le 2> .tmp => on mets ... dans .tmp(je dirais les standard error stream?)
    cat .tmp|grep ERROR => on affiche les ERROR dans .tmp
    cat .tmp|grep -v ERROR >> hello-world.log => on mets les elem du .tmp sans ERROR dans hello-world.log
    est-ce bien ça?

    Je viens de faire quelques petits test et le .tmp ne se supprimes pas lorsqu'il n'y a pas de cerr

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Sparky95 Voir le message
    en faisant comme ça, si il n'y à pas de cerr dans le code rien ne s'enregistres dans le fichier :/

    2> .tmp && cat .tmp |grep ERROR && cat .tmp|grep -v ERROR >> hello-world.log && rm .tmp => si je comprends bien

    le 2> .tmp => on mets ... dans .tmp(je dirais les standard error stream?)
    Oui, exactement. C'est std::cerr + std::clog

    Citation Envoyé par Sparky95 Voir le message
    && cat .tmp|grep ERROR => on affiche les ERROR dans .tmp
    Oui, exactement.

    Citation Envoyé par Sparky95 Voir le message
    && cat .tmp|grep -v ERROR >> hello-world.log => on mets les elem du .tmp sans ERROR dans hello-world.log
    est-ce bien ça?

    Je viens de faire quelques petits test et le .tmp ne se supprimes pas lorsqu'il n'y a pas de cerr
    C'est possible. Il te faut refair le programme afin de prévenir les erreurs de bash. C'est très simple. Attention au &&

  13. #13
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    j'ai fini par trouver. j'ai du remplacer les && par des ; et maintenant cela fonctionnes merci

    Voila le code final
    Code c : 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
    40
    41
    42
    43
    44
    #include <iostream>
    #include <unistd.h>
    #include <sys/syscall.h>
     
    int main(int n, char *params[])
    {
        switch(n){
            case 1:
                system("./main TestLog");
                return 0;
            case 2:
                std::cout << "Main() ppid = " << getppid() << " pid = " << getpid() << " tid = " << syscall(SYS_gettid) << std::endl;
                //on écrases le vieu log => pas besoin de concerver un historique
                std::string command;
                //on clean le log
                command += "echo '----------NEW---------' > ";
                command += params[1];
                command += ".log;";
     
     
                //on mets les stream error dans .tmp
                command += "./";
                command += params[1];
                command += " 2>.tmp;";
     
     
                //on affiche les erreurs
                command += "cat .tmp|grep ERROR;";
     
                //on enregistre dans log les clog
                command += "cat .tmp|grep -v ERROR >>";
                command += params[1];
                command += ".log;";
     
                //on supprime le fichier tmp
                command += "rm .tmp";
     
                system(static_cast<const char *>(command.c_str()));
     
                std::cout << "Main() pid = " << getpid() << " tid = " << syscall(SYS_gettid) << std::endl;
            break;
        }
        return 0;
    }
    Qu'en penses-tu?

    J'aurais bien voulu faire du live avec un tail -f du fichier log malheureusement les données s'enregistrent à la fin de l'exec :/ dommage mais sinon pour le rester c'est NICKEL ça va bien m'aider si jamais j'ai besoin de debug et ça ma appris pas mal de choses D

    Merci beaucoup de ton aide

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut Bonjour
    Bonjour,
    Je pense que le programme est encore pas ideal lol, mais ça va.

  15. #15
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    C'est à dire?
    Qu’améliorerais tu?

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2019
    Messages : 22
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Sparky95 Voir le message
    C'est à dire?
    Qu’améliorerais tu?
    Je pense qu'il faut que le programme reçoive la liste de n'importe quel nombre des programmes à tester d'un fichier:

    Ce serait plus utile.

  17. #17
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Dans ce cas si non car je test mes jeux de tests 1 par 1 et je n'aurai du coup pas l'utilité d'une liste de teste à tester les uns après les autres.
    Si tu as d'autres idée tiens moi toujours au courant on ne sait jamais, elles pourraient bien m’intéressés

  18. #18
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2011
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : juin 2011
    Messages : 615
    Points : 2 938
    Points
    2 938
    Par défaut
    Juste une question, pourquoi faire un programme C++ qui ne fait que construire des commandes shell pour les exécuter plutôt que directement écrire un script shell ?

    Note: cat file | grep reg -> grep reg file

  19. #19
    Membre actif
    Avatar de Sparky95
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2016
    Messages : 226
    Points : 233
    Points
    233
    Par défaut
    Parce que ma vision était obstrué c'est vrai que j'aurais pu bien vu
    Bha maintenant cela fonctionnes et c'était un support pour mes jeux de test

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

Discussions similaires

  1. Creation visite à partir d'un fichier Log
    Par Abou Oubayd'Allah dans le forum Général Java
    Réponses: 5
    Dernier message: 02/11/2016, 15h46
  2. la creation de fichier log en c
    Par mipou dans le forum C
    Réponses: 13
    Dernier message: 16/05/2009, 17h58
  3. [Log4j]Cherche visualiseur de fichiers logs de log4j
    Par RolandB dans le forum Logging
    Réponses: 9
    Dernier message: 18/03/2009, 15h11
  4. creation de fichiers log pour chaque table
    Par khalid_kha dans le forum Administration
    Réponses: 3
    Dernier message: 18/08/2008, 18h16
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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