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 :

Comment suspendre l'exécution de mon script ?


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Comment suspendre l'exécution de mon script ?
    Salut,

    Je cherche à suspendre l'exécution de la suite de mon script avec la condition suivante : Tant que le dossier spécifié est vide, ne fait rien. En fait, je dispose d'un serveur qui récupère tous les fichiers contenu dans un dossier et les envoie tous les uns derrière les autres à un client.Mon but, c'est de suspendre l'envoie des fichiers tant que le dossier source est vide. Le dossier est vide à l'état initial !

    J'ai pensé à écrire une boucle infinie qui va tourner dans le vide tant que le dossier lu ne contient pas de fichiers. J'ai fais attention à ne pas prendre en compte les fichiers "." et ".." mais malheureusement, je sors de cette boucle aussitôt que j'y entre malgré que le dossier spécifié est vide. Et pourtant mon code me parais bien écrit pour le faire :

    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
    int done = 0;
     
    while (!done)
    {
            DIR* rep = NULL;
            rep = opendir(DOSSIER); /* Ouverture d'un dossier */
            struct dirent* fichierLu = NULL;
            while (!done && (fichierLu = readdir(rep)))
            {
                if (strcmp(fichierLu->d_name, ".") != 0 && strcmp(fichierLu->d_name, "..") != 0);
                done = 1;
            }
            if (!done)
                closedir(rep);
     }
    merci

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    Hello,

    Il me semble que done passe à 1 quel que soit le répertoire que te renvoie readdir. Le ; derrière le if est en trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (strcmp(fichierLu->d_name, ".") != 0 && strcmp(fichierLu->d_name, "..") != 0);
                done = 1;

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut
    Merci pour ta réponse. effectivement c'est ce que il doit s'y passer. done change de valeur dès le premier passage et c'est bien ce qui m'étonne ! le dossier est vide ... pour quelle raison il cette valeur change ? il y a des fichiers cachés qu'on ne voit pas forcement ?

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    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 527
    Par défaut
    salut d'après ce que je comprends de ce que tu veux faire,
    il te faut des fonctionnalités qui lancent une sorte de déclencheur envoyant des notifications de changement du répertoire.
    Donc si tu veux faire cela il faut appeler les fonctions spécifiques de l'OS.Sous Windows il y a des API spécifiques pour ça comme ReadDirectoryChangesW

    Citation Envoyé par fusionfroide Voir le message
    En fait, je dispose d'un serveur qui récupère tous les fichiers contenu dans un dossier et les envoie tous les uns derrière les autres à un client.Mon but, c'est de suspendre l'envoie des fichiers tant que le dossier source est vide. Le dossier est vide à l'état initial !

    J'ai pensé à écrire une boucle infinie qui va tourner dans le vide tant que le dossier lu ne contient pas de fichiers.
    merci
    eh bien oui il faut utiliser des API de lecture de répertoire comme celle mentionnée précédemment si tu est sous Windows.
    Avec ReadDirectoryChangesW tu auras une notification que le contenu du répertoire a été modifié donc tu vas effectuer le transfert de fichier.
    Si le répertoire devient vide eh bien tu auras une autre notification et tu pourras arrêter le transfert de fichier.
    Il faut lancer une fonction qui contient ReadDirectoryChangesW dans un thread.

    Pour tout ce qui est gestion de répertoires ça dépend de l'OS...

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par fusionfroide Voir le message
    Merci pour ta réponse. effectivement c'est ce que il doit s'y passer. done change de valeur dès le premier passage et c'est bien ce qui m'étonne ! le dossier est vide ... pour quelle raison il cette valeur change ? il y a des fichiers cachés qu'on ne voit pas forcement ?
    Citation Envoyé par edgarjacobs Voir le message
    Le ; derrière le if est en trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(condition);
    	instruction;
    ceci est une erreur malheureuse. le ; après le if est l'opération soumise à condition. "instruction;" est du coup exécutée systématiquement.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut
    Salut,

    Finalement j'ai trouvé comment faire. Le code suivant me permet donc de tourner dans une boucle while sans rien faire pour bloquer l'execution du script tant que le dossier est vide et aussitôt que je copie un fichier dans ce même dossier, je sors de la boucle :

    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
     
     
    int main(void)
    {
        int compteur =0;
        int continuer = 1;
     
        DIR* rep = NULL;
        while(continuer)
        {
            rep = opendir(DOSSIER); /* Ouverture d'un dossier */
            struct dirent* fichierLu = NULL;
            if (rep == NULL) /* Si le dossier n'a pas pu être ouvert */
        {
            perror("Erreur :");
            exit(1); /* (mauvais chemin par exemple) */
        }
     
            while ((fichierLu = readdir(rep)) != NULL)
            {
                if (strcmp(fichierLu->d_name, ".") != 0 && strcmp(fichierLu->d_name, "..") != 0)
                {
                    compteur++;
                    if(compteur>0)
                    {
                        break;
                    }
                }
            }
            if(compteur==0)
            {
                closedir(rep);
            }
            else
            {
                continuer=0;
            }
        }
     
     
        return 0;
    }

Discussions similaires

  1. [EasyPHP] Comment programmer l'exécution d'un script php ?
    Par onlytime dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 29/03/2008, 19h56
  2. mavaise fin d'exécution de mon script .sql
    Par super_dz dans le forum Oracle
    Réponses: 4
    Dernier message: 13/05/2007, 14h30
  3. Réponses: 6
    Dernier message: 12/12/2006, 01h30
  4. [javascript] comment interrompre l'exécution d'un script?
    Par r0d dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 09/11/2006, 13h01
  5. Rapidité d'exécution de mon script
    Par Olivier Regnier dans le forum Administration système
    Réponses: 2
    Dernier message: 20/09/2006, 12h06

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