|
|
|
|
Bonjour,
Je dois réaliser un programme de ping en C. En fait, les adresse à pinguer sont à lire dans un fichier.
Mon progr les lit, les pingue et les retransfère les pings dans un fichier 2. C'est là qu'est le probl car j'aimerais que seules les adr ip restees sans reponse soient transferees dans le fichier 2.Malheureusement je ne sais vraiment pas comment faire. Si vous aviez une idee, ce serait super sympa. Suis debutant en C.
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define p 512
#define ping "ping"
int main()
{
FILE *fichier;
FILE *fichier2;
char n[250], v[250];
char commande [p] ;
fichier = fopen ("fichier.txt","rt");
fscanf(fichier, "%s\n%s\n",&n,&v);
int atoi(char *n);
int atoi(char *v);
strcpy(commande, "ping ");
strcat(commande, n);
strcat(commande, "> fichier2.txt");
system (commande);
strcpy(commande, "ping ");
strcat(commande, v);
strcat(commande, "> fichier2.txt");
system (commande);
fclose (fichier);
fclose (fichier2);
exit (0);
}
Ben le problème avec la fonction system() c'est que tu n'as pas de retour à propement dit de ce que tu as lancé, que ce soit un ping ou autre.
|
Bon en fait je viens de tester la fonction system(), et elle renvoie une valeur correspondant à la réussite ou non de la commande passée en paramètre. Exemple avec du code :
int _tmain(int argc, _TCHAR* argv[])
{
printf("Luffy's Ping Test\n");
int ret=system("ping 127.0.0.0");
printf("\nResultat : %d\n\n",ret);
system("pause");
return 0;
}
là je ping une mauvaise adresse, et le retour est 1. int _tmain(int argc, _TCHAR* argv[])
{
printf("Luffy's Ping Test\n");
int ret=system("ping 127.0.0.1");
printf("\nResultat : %d\n\n",ret);
system("pause");
return 0;
}
là le retour = 0 donc ça a marché. donc dans ton code, tu inclues un test sur le retour de system() if (ret==0) { //tu écris dans ton fichier } ++ Le Parisien, il vaut mieux l'avoir en journal !!! :-P |
Je suis vraiment désolé mais il me dit à la compil "cannot convert int to char*" Je suis vraiment desole mais je débute ...Voici le code au cas où :
#include <winsock.h> #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #define p 512 #define ping "ping" int main() { FILE *fichier; FILE *fichier2; char n[250]; char commande [p] ; fichier = fopen ("fichier.txt","r"); fscanf(fichier, "%s\n",&n); int atoi(char *n); strcpy(commande, "ping "); strcat(commande, n); system(commande); if (n==1) { fprintf(fichier2, "%s\n",&n); } fclose (fichier); fclose (fichier2); exit (0); } |
Un tout grand merci à toi. Finalement j'y suis arrivé (du moins 1 partie). Voici le code :
#include <winsock.h> #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <conio.h> #define p 512 int main() { FILE *fichier; FILE *fichier2; char n; char commande [p] ; fichier = fopen ("fichier.txt","r"); fichier2 = fopen ("fichier2.txt", "w"); fscanf(fichier, "%s\n",&n); int atoi(char *n); strcpy(commande, "ping "); strcat(commande, &n); int ret = system (commande); if (ret==1) { fprintf (fichier2, "%s\n", &n); } system ("pause"); return 0; Maintenant c'est au moment ou je lui dis de lire les 2 adr qu'il merde : #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <conio.h> #define p 512 int main() { FILE *fichier; FILE *fichier2; char n, v; char commande [p] ; fichier = fopen ("fichier.txt","r"); fichier2 = fopen ("fichier2.txt", "w"); fscanf(fichier, "%s\n%s\n",&n,&v); int atoi(char *n); int atoi(char *v); strcpy(commande, "ping "); strcat(commande, &n); int ret = system (commande); if (ret==1) { fprintf (fichier2, "%s\n", &n); } strcpy(commande, "ping "); strcat(commande, &v); int ret = system (commande); if (ret==1) { fprintf (fichier2, "%s\n", &v); } system ("pause"); return 0; } |
Alors plusieurs petites remarques :
int atoi(char *n); tu n'as pas mis de nom variables, donc il ne doit pas compilé. De plus en C, il faut savoir que les variables sont toujours à déclarer au tout début de la fonction. Les nouveaux compilo acceptent, mais dans la norme, c'est mieux de les déclarer et de les itinitialiser avant toute chose. Ensuite tu déclares 2 fois la variable "int ret", donc po possible, pas 2 variables dans une fonction qui portent le même nom. sinon je trouve ton code très lisible et propre ! j'aime bien le #define p 512 char commande [p] ; Le Parisien, il vaut mieux l'avoir en journal !!! :-P
|
Tu n'as pas écouté tout ce que je t'ai dit !!! lol ;-)
int ret=0; ret=1; quand tu écris "int ret" on dit que tu déclares ta variable. De la mémoire est allouée pour pouvoir contenir une donnée. donc quand tu refais ret=1; le processeur met la valeur 1 dans la case mémoire réservée pour ret. et il faut que tu déclares tes variables au tout début de ta fonction, et en leur mettant une valeur nulle pour éviter des erreurs : #include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <conio.h>
#define p 512
int main()
{
FILE *fichier=NULL;
FILE *fichier2=NULL;
char n, v;
char commande [p]=NULL ;
int ret=0;
fichier = fopen ("fichier.txt","r");
fichier2 = fopen ("fichier2.txt", "w");
fscanf(fichier, "%s\n%s\n",&n, &v);
int atoi(char *n);
int atoi(char *v);
strcpy(commande, "ping ");
strcat(commande, &n);
ret = system (commande);
if (ret==1)
{
fprintf (fichier2, "%s\n", &n);
}
strcpy(commande, "ping ");
strcat(commande, &v);
ret = system (commande);
if (ret==1)
{
fprintf (fichier2, "%s\n", &v);
}
system ("pause");
return 0;
}
et une question, à quoi te sert : int atoi(char *n); int atoi(char *v); ? Le Parisien, il vaut mieux l'avoir en journal !!! :-P
|
Bonjour à tous,
|
Faire des ping avec system(ping) je trouve ca tres bof !!
|