Répéter une boucle tous les 5 minutes

Bonjour,
Je voudrais savoir comment faire pour répéter une boucle ou une fonction tous les 5 minute
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(void)
{
char tab[100];
char *p;
FILE *f;
int echou;

echou = 0;
system("ping www.google.fr >> out.txt");
f = fopen("out.txt", "r");
if(f == NULL){
puts("Erreur d'ouverture");
return -1;
}

while(fgets(tab, sizeof(tab), f)){
if((p = strstr(tab, "757")) != NULL)
echou++;
if(echou == 5)
system("shutdown/s");
}

fclose(f);
return 0;
}
Ici je veux que le Ping ce répète toute les 5 minute

merci

5 réponses

  1. Tu peux utiliser la fonction Sleep pour faire une pause.
    0
    1. on peux pas faire pour que le sleep dure que 5min
      0
    2. Ben si, sleep(300000) dure 5 minutes.
      0
    3. ca ne marche pas il me dis implicit declaration of function sleep
      0
    4. Bon alors essaye en ajoutant #include <unistd.h>
      et avec sleep(300)
      J'ai supposé que c'était en millisecondes mais selon les compilateurs et les bibliothèques, ça peut être en secondes.
      (Sinon "imlicit declaration of function", je ne pense pas que ça soit gênant car c'est juste un warning mais pas une erreur)
      0
    5. undefined refference to_sleep
      voila ca marche pas
      0
  2. j'ai une autre quesstion
    par exammple si le ping a echoué 1 ou 2 ou 3 ou 4 fois a que apré le ping réuessie comment faire pour remetre la variable echou a zéro

    if(ping reussi ) echou = 0;
    0
    1. et ben tu as :

      if((p = strstr(tab, "757")) != NULL)          
      echou++; 

      Donc :

      if(ping reussi ) echou = 0; 
      Équivaudrait a :

      if((p = strstr(tab, "757")) == NULL)          
      echou = 0;

      non ?
      0
    2. je vais voire
      0
    3. Je suis septique avec ce test pour déterminer si le ping a réussi car c'est quoi ce 757 ?

      Si ça réussit, le fichier out.txt contient un truc du genre :

      Envoi d'une requ^te 'ping' sur www.l.google.com [74.125.230.83] avec 32 octets de donn'esÿ:
      R'ponse de 74.125.230.83ÿ: octets=32 temps=45 ms TTL=55
      R'ponse de 74.125.230.83ÿ: octets=32 temps=43 ms TTL=55
      R'ponse de 74.125.230.83ÿ: octets=32 temps=129 ms TTL=55
      R'ponse de 74.125.230.83ÿ: octets=32 temps=43 ms TTL=55

      Statistiques Ping pour 74.125.230.83:
      Paquetsÿ: envoy's = 4, re#us = 4, perdus = 0 (perte 0%),
      Dur'e approximative des boucles en millisecondes :
      Minimum = 43ms, Maximum = 129ms, Moyenne = 65ms


      et si ça échoue, il contient :
      La requ^te Ping n'a pas pu trouver l'h"te www.google.fr. V'rifiez le nom et essayez ... nouveau.

      (désolé pour les accents, ils sont comme ça dans le fichier out.txt créé)

      Je ne vois pas le rapport avec 757 car dans les deux cas, il n'y a pas de 757...
      0
    4. Oui tout a fait d'accord, enfin de manière générale le code de ce programme me fait super mal aux yeux alors j'ai préféré me contenter de répondre a la question sans chercher a comprendre :D
      0
  3. non 747 c'est n'est qu'un example
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include<windows.h>
    int echou=0;
    int
    main(void)
    {while(1){
    char tab[100];
    char *p;
    FILE *f;

    remove ("out.txt");
    system("ping www.google.fr >> out.txt");
    f = fopen("out.txt", "r");

    if(f == NULL){
    puts("Erreur d'ouverture");
    return -1;
    }

    if(fgets(tab, sizeof(tab), f)){
    if((p = strstr(tab, "100%"))||(p = strstr(tab, "50%"))||(p = strstr(tab, "pas"))||(p = strstr(tab, "75%"))||(p = strstr(tab, "25%"))||(p = strstr(tab, "Impossible"))||(p = strstr(tab, "attente")) != NULL)

    echou++;

    if(echou == 5){ system("shutdown/s"); }

    }

    printf("%d",echou);

    fclose(f);

    Sleep(300000);
    }
    return 0;
    }
    0
    1. la j'ai bessoin que "echou" devien 0 si le ping réussi
      0
    2. Voici le code que je te propose

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <windows.h>

      int main(void) {
      FILE *f;
      int echou=0;

      while(1){
      // Efface le fichier out.txt
      remove ("out.txt");
      // Effectue le ping
      system("ping www.google.fr");
      // Créer le fichier out.txt si la commande ping a réussi
      system("IF NOT ERRORLEVEL 1 (echo OK >>out.txt)");
      // Ouvre le fichier out.txt
      f = fopen("out.txt", "r");
      if(f == NULL) {
      // Le fichier out.txt n'existe pas, le ping a échoué
      echou++;
      if(echou == 5){
      system("shutdown/s");
      }
      }
      else {
      // Le fichier out.txt a été ouvert, le ping a réussi
      echou = 0;
      fclose(f);
      }
      // Pause de 5 minutes
      Sleep(300000);
      }
      return 0;
      }
      0
    3. mais ton code ne marche pas quand je débrache le cable adsl au boud de 5 tentative de ping le pc devrais s'etaindre mais la le ecou reste a zéro quoi qu'ils arrive, merci quand méme
      0
  4. je vous explique le but s'est de faire etaindre le pc s'il n'y a pas de connection internet pendat 25 min
    si vous avez une ideé ou bien un logiciele qui existe ditent le moi, merci
    0
    1. Je n'ai plus de compilateur C/C++ pour tester mon code mais si ça ne fonctionne pas, c'est soit le fichier out.txt n'est pas effacé, soit le fichier out.txt est systématiquement créé ou soit que fopen("out.txt", "r") ne retourne pas NULL si le fichier n'existe pas.

      1er point : il faut vérifier que remove("out.txt") efface bien le fichier (j'ai repris cette ligne de ton code)

      2ème point : le problème vient peut-être des deux lignes system. Ensemble, je les ai testé, elles fonctionnent : le fichier out.txt est bien créé seulement s'il y a du réseau. Mais avec deux system consécutives, le ERRORLEVEL ne correspond peut-être pas au résultat du PING.
      Si le problème vient de là (c'est-à-dire que le fichier out.txt est créé même si le ping a échoué), tu peux copier les deux lignes
      ping www.google.fr
      IF NOT ERRORLEVEL 1 (echo OK >>out.txt)

      dans un fichier texte que tu renommes en .bat, par exemple test.bat, et tu remplaces les deux lignes system par system("test.bat") qui créera le fichier out.txt seulement si le ping a fonctionné

      3ème point : il faut vérifier que si le fichier out.txt n'existe pas, ça va bien dans la portion du code correspondant au test if(f == NULL)

      Bon courage.
      0