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 :

[C] Empecher Windows de clore l execution d un programme


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [C] Empecher Windows de clore l execution d un programme
    Bonjour a tous et a toutes

    Je suis chargé de programmer un petit soft pour "nettoyer" un fichier texte d informations inutiles.
    Jusque la rien de bien compliqué, le problème se pose au moment de l exécution

    Le fichier de sortie se retrouve bien avec les bonnes valeurs, cependant, Windows (7 home) ferme de force le programme car la boucle dans laquelle s execute le nettoyage est répétée trop de fois (protection contre les boucles infinies) bien avant la fin de mon fichier d entrée

    Y a t il moyen de forcer windows a laisser le programme s executer ou faut il que je fasse autrement?

    Merci beaucoup

    (Au passage, est ce que dans la ligne
    while (feof(in)==0)
    j utilise correctement feof(FILE*) ?)

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Testes-tu aussi la présence d'erreur? (ferror si je ne me trompe pas)
    En effet si tu ne gère pas les erreurs, feof renverra toujours false et tu entreras dans une boucle infinie.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DrakaSAN Voir le message
    (Au passage, est ce que dans la ligne
    while (feof(in)==0)
    j utilise correctement feof(FILE*) ?)
    Pas vraiment : http://c.developpez.com/faq/index.ph...eneral#ES_feof

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Effectivement je ne testait pas ferror

    Je viens de le rajouter derrière mes lectures et écritures de fichiers, avec un perror pour l affichage.

    Après test, windows ferme mon programme avant l affichage de perror.

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        //Variables
        FILE* in;
        FILE * out;
        char cache [50]={0};
        int videur=0;
     
        //Recuperer le nom du fichier d entrée
        fscanf(stdin, "%s", cache);
     
        //Vider le tampon
        while ((videur = getchar ()) != '\n' && videur != EOF);
     
        //Ouvrir le fichier d adresse e mail
        in=fopen(cache, "r");
        if (in==NULL)
        {
            fprintf(stdout, "Couldn t open %s", cache);
            return -1;
        }
     
        //Recuperer le nom du fichier de sortie
        fscanf(stdin, "%s", cache);
     
        //Vider le tampon
        while ((videur = getchar ()) != '\n' && videur != EOF);
     
        //Ouvrir le fichier nettoyé
        out=fopen(cache, "w");
        if (out==NULL)
        {
            fprintf(stdout, "Couldn t open %s", cache);
            return -1;
        }
     
    //!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
     
        //Nettoyer le fichier
        while (feof(in)==0)
        {
            if (ferror(in))
            {
                perror("in: ");
                return -1;
            }
     
            //Lire le champs
            fscanf(in, "%s", cache);
     
            //Si le champ est une adresse e mail
            if (cache[strlen(cache)-4]=='.'||cache[strlen(cache)-3]=='.')
            {
                //L ecrire dans le fichier de sortie
                fprintf(out, "%s\n", cache);
                if (ferror(out))
                {
                    perror("out: ");
                    return -1;
                }
            }
        }
     
    //!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
     
        fprintf(stdout, "\nend\n");
        return 0;
    }
    Développé en C sous Windows-CodeBlocks

    Sachant que mes fichiers d entrée contiennent plus d 1 millions de lignes avec 5 a 8 champs par lignes, je persiste sur un conflit avec les boucles infinie
    (Mon fichiers de sortie fait 280k lignes, avec 1champ par ligne)

    EDIT:
    Pour détecter la fin du fichier sans feof, il faut donc que j utilise les retours de fscanf?

    EDIT2: Je vérifie maintenant via feof(in) && rets!=EOF avec rets=fscanf
    Toujours les mêmes problèmes

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Ta boucle ne reprend pas vraiment la structure proposée dans la FAQ. En fait, tu dois faire un scanf et si celui-ci échoue, déterminer ce qu'il s'est passé. Scanf peut rater parce que qu'il ne rencontre pas le format attendu (tu cherches une chaine, normalement s'il y a quelque chose à lire, ça passe), ou il n'y a rien à lire ou pas assez (fin du fichier avec feof) ou alors impossible de lire le fichier (on est au delà d'un problème de contenu non adapté, et on regarde ferror).

    Est-ce que tu as mis un compteur pour voir le nombre d'itération qu'il fait ? Savoir si c'est toujours la même chose, quelque soit le fichier.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Qu'est-ce que c'est que cette histoire de protection contre les boucles infinies? Je ne trouve pas ça sur MSDN.

    Par contre, je vois un gros potentiel de débordement de tampon si n'importe quelle ligne du fichier fait plus de 49 caractères. Et si ça arrive, ça peut écraser les pointeurs in et out, ce qui ferait planter les fonctions qui les utilisent...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    je suis entièrement d'accord avec Medinoc , la probabilité de dépasser ton char cache[50] est fortement probable ce qui te donne un plantage...

Discussions similaires

  1. Execution d'un programme Qt sous windows Xp
    Par undercrash dans le forum Qt
    Réponses: 2
    Dernier message: 20/11/2007, 21h26
  2. [JAVA] Execution d'un programme windows
    Par arnaud036 dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2007, 12h11
  3. Compiler et executer un petit programme sous windows
    Par nistelsof dans le forum Langage
    Réponses: 6
    Dernier message: 30/05/2007, 17h31
  4. empecher plusieurs instances de s'executer
    Par latoye dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/03/2007, 12h38
  5. Erreur Windows ! Dans l'execution d'un programme !
    Par Geoff! dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/06/2006, 16h36

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