Petite erreur d'exeption

Petite erreur d'exeption - C - Programmation

Marsh Posté le 15-02-2006 à 10:39:34    

Bonjour à tous,
 
j'ai comme projet de fair eun logiciel de mise à jour dns en fonction d'un ping sur une ip.
J'en suis arrivé pour le moment au ping, j'arrive à le faire à exploiter les infos du ping mais je sais pas pourquoi, il m'a mis d'un coup une erreur d'exeption alors que 5min auparavant le même code marchais niquel.
Il me met le curseur sur la boucle while, donc si vous pouvez m'aider à trouver l'erreur sa serais génial.  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int ping ()
  5. {
  6.         int result = 0;
  7.    char commande[100];
  8.    strcpy (commande,"ping xxx.xxx.xxx.xxx" );
  9.    system(commande);
  10.    FILE * temp;
  11.    temp = fopen ("temp","r" );
  12.    char test[50];
  13.    while (!feof (temp))  // C'est ici qu'il me met une erreur
  14.    {
  15.          fscanf (temp,"%s",test);
  16.          if (strcmp (test,"octets=32" ) == 0)
  17.          {
  18.                            result = 1;
  19.          }
  20.    }
  21.    fclose(temp);
  22.    system("erase temp" );
  23.    return result;
  24. }
  25. void main (void)
  26. {
  27.    int result;
  28.    result = ping ();
  29.    printf ("\n 0 pour offline, 1 pour online : %d",result);
  30.    getchar();
  31. }


Voici l'erreur qu'il me met
http://perso.wanadoo.fr/cutycatz/erreur.JPG
 
 
Merci d'avance

Reply

Marsh Posté le 15-02-2006 à 10:39:34   

Reply

Marsh Posté le 15-02-2006 à 10:40:52    

bin je sais pas, ptet faudrait commencer par tester que fopen ne te renvoie pas NULL ?

Reply

Marsh Posté le 15-02-2006 à 10:42:15    

Code :
  1. char commande[100];
  2.   strcpy (commande,"ping xxx.xxx.xxx.xxx" );
  3.   system(commande);


 
bah quitte a faire, hein

Code :
  1. system("ping xxx.xxx.xxx.xxx" );


 
c'est tout aussi ergonomique
 

Reply

Marsh Posté le 15-02-2006 à 10:45:20    

Mais le code fonctionnais 5min avant, je sais pas ce qu'il c'est passer mais d'un coup y'a eu l'erreur :-/

Reply

Marsh Posté le 15-02-2006 à 10:47:12    

je te la refait
 
il FAUT que tu testes si FOPEN te RENVOIE NULL
 
si pour une raison ou pour une autre fopen n'arrive pas a ouvrir "temp" (genre si le fichier n'existe plus, par exemple suite a un delete, un probleme de droit, blablabla... ) alors fopen te renverra NULL (normal t'essaye de lire un truc qui marche pas). Et toi dans la suite de ton code tu utilises une valeur NULL ce qui ne peut mener qu'a la ruine, le sang et la destruction.
 
Faut pas chouiner betement sur les temps passés ou tout était beau mais faut aller de l'avant mon ptit pere


Message édité par chrisbk le 15-02-2006 à 10:47:59
Reply

Marsh Posté le 15-02-2006 à 10:49:14    

Je vois pas comment le resultat du ping va rentrer dans ton fichier "temp"... a moins que tu ne fasses "ping xxx.xxx.xxx.xxx > temp", ou alors j'ai rien compris

Reply

Marsh Posté le 15-02-2006 à 10:50:05    

(yé, et je connais pas la commande erase perso ?)

Reply

Marsh Posté le 15-02-2006 à 10:51:25    

Le resultat du ping rentre dans le fichier ça j'en susi sur puisqu'il fonctionnait niquel chrome :)
 
Bon je teste l'ouverture du fichier :)

Reply

Marsh Posté le 15-02-2006 à 10:52:10    

Heu sinon, au lieu de erase, y'a pas une commande pour vider le contenu du fichier ?
 
SA pourrai éviter le bug d'ouverture du fichier

Reply

Marsh Posté le 15-02-2006 à 10:54:22    

Cuty74 a écrit :

Le resultat du ping rentre dans le fichier ça j'en susi sur puisqu'il fonctionnait niquel chrome :)


 
bin t'es bien le seul, parce que moi je suis sur que non

Reply

Marsh Posté le 15-02-2006 à 10:54:22   

Reply

Marsh Posté le 15-02-2006 à 11:01:22    

En fait tu n'as pas besoin de tout ca, la commande system retourne un int .. Or quand une commande se passe biem elle retourne 0 , autre chose sinon donc avec ca, ca sufiit :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void main(int argc, char* argv[])
  4. {
  5.     char lbuff[128];
  6.     if(argc <2 )
  7.     {
  8.        printf("Syntax TPING <Ip>\n" );
  9.        exit(1);
  10.     }
  11.     sprintf(lbuff, "ping %s", argv[1]);
  12.     int rc = system(lbuff);
  13.     printf("Host ok = %d\n", !rc);
  14. }


Reply

Marsh Posté le 15-02-2006 à 11:03:08    

Oki je vais tester ça je te remercie :)

Reply

Marsh Posté le 15-02-2006 à 11:09:13    

Ah c'est niquel ça marche parfaitement jte remercie beaucoup ;)

Reply

Marsh Posté le 15-02-2006 à 11:19:27    

Sinon une autre question, vous ne sauriez pas par hazare comment mettre à jour un no-ip ou un dyndns par envoie d'un mail ?

Reply

Marsh Posté le 15-02-2006 à 11:28:28    

Le mieux c'est de regarder sur le site et voir les differentes options. En general ils ont ftp et/ou mail

Reply

Marsh Posté le 15-02-2006 à 11:42:02    

Ouép c'est ce que j'ai fais mais je ne trouve rien du tout pour ça. En plus je ne suis pas une bete en anglais donc ça n'aide pas non plus

Reply

Marsh Posté le 15-02-2006 à 11:50:47    

chez no-ip.org il y a l'option "Free Dynamic DNS update client", c'est un client qui tourne et met a jour no-ip avec l'adresse par exemple. J'ai pas vu le detail car j'ai pas souscrit .

Reply

Marsh Posté le 15-02-2006 à 11:53:13    

Cuty74 a écrit :

Ouép c'est ce que j'ai fais mais je ne trouve rien du tout pour ça. En plus je ne suis pas une bete en anglais donc ça n'aide pas non plus


 
2 secondes pour une recherche google et voila
http://lea-linux.org/cached/index/ [...] P.COM.html

Reply

Marsh Posté le 15-02-2006 à 13:14:17    

Cuty74 a écrit :

au lieu de erase,


Pas standard. C'est delete().

Citation :

y'a pas une commande pour vider le contenu du fichier ?


cette fonction efface le fichier.
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-02-2006 à 13:15:51    

Cuty74 a écrit :


Code :
  1. void main (void)




Non.
 
http://mapage.noos.fr/emdel/notes.htm#typemain


Message édité par Emmanuel Delahaye le 15-02-2006 à 13:24:07

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-02-2006 à 13:20:23    

Ok, c'est juste pour voir si ca suit :-) Ok pour le int main, mille exuses

Reply

Marsh Posté le 15-02-2006 à 16:28:23    

Heu oué je sais pas pk ya une void la dedans ^^
 
Bon j'ai résulu pas mal de p'tis soucis grace à vous, mais là j'en ai un autre que je ne trouve pas.
 
Comment envoyer une requete html en c ?
Car j'ai trouver la syntaxe pour mettre à jour le dyndns d'ailleur la voici
 

Code :
  1. "http://"NomUser":"Pass"@members.dyndns.org/nic/update?system=dyndns&hostname="adresse dns"&myip="IP"&wildcard=OFF&mx=&backmx=NO&offline=NO"


 
mais je ne trouve pas dans les aides de builder la fonction que me permet de le faire donc si quelqu'un peux m'aider sa serai super :)

Reply

Marsh Posté le 15-02-2006 à 17:46:14    

Je connais pas Builder assez, la solution est peut etre dans l'utilisation des sockets ou and l'utilisation de libcurl, une library permettant de faire pas mal de chose de style Http / Https en C.
http://curl.haxx.se/

Reply

Marsh Posté le 15-02-2006 à 19:51:43    

quand tu créé un fichier temporaire tu peux utiliser tmpnam pour générer un nom de fichier unique, ou alors utilises popen si ton envirronement le supporte

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed