Répéter une boucle tous les 5 minutes

Fermé
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 - Modifié par massik25w le 27/12/2010 à 23:59
 noghost - 29 déc. 2010 à 20:17
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

Tu peux utiliser la fonction Sleep pour faire une pause.
0
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
28 déc. 2010 à 00:07
on peux pas faire pour que le sleep dure que 5min
0
Ben si, sleep(300000) dure 5 minutes.
0
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
Modifié par massik25w le 28/12/2010 à 00:31
ca ne marche pas il me dis implicit declaration of function sleep
0
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
Modifié par massik25w le 28/12/2010 à 00:41
undefined refference to_sleep
voila ca marche pas
0
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
28 déc. 2010 à 12:43
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
Galawin Messages postés 835 Date d'inscription lundi 27 août 2007 Statut Membre Dernière intervention 17 novembre 2013 123
Modifié par Galawin le 28/12/2010 à 19:18
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
28 déc. 2010 à 22:56
je vais voire
0
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
Galawin Messages postés 835 Date d'inscription lundi 27 août 2007 Statut Membre Dernière intervention 17 novembre 2013 123
28 déc. 2010 à 23:14
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
29 déc. 2010 à 00:28
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
29 déc. 2010 à 00:31
la j'ai bessoin que "echou" devien 0 si le ping réussi
0
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
29 déc. 2010 à 13:51
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
massik25w Messages postés 55 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 2 juin 2011 2
29 déc. 2010 à 16:05
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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