PING pb avec system() Visible

Signaler
Messages postés
334
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
3 juillet 2010
-
Messages postés
4
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
26 avril 2004
-
Je voudrai réaliser un prog. PING
J’en ai trouvé un prog. que je trouve bien, et qui est rapide pour savoir ci il y a un serveur avant de réaliser un screnner.
Ce programme indique uniquement, ci il y a un serveur.
http://www.cppfrance.com/code.aspx?ID=10221

int ping (char ip[50])
{
int result = 0;
char commande[100];
strcpy (commande,"ping ");
strcat (commande,ip);
strcat (commande, " -n 1 > temp");
system (commande); // <--- PB ICI

FILE * temp;
temp = fopen ("temp","r");
char test[50];
while (!feof (temp))
{
fscanf (temp,"%s",test);
if (strcmp (test,"TTL=120") == 0)
{
result = 1;
}
}
fclose(temp);
return result;
}


Le petit problème c’est la fonction «system» qui affiche une fenêtre MS-DOS.

Il y a-t-il un moyen pour la cacher, ou une autre fonction pour réaliser la même chose ?

Donc, ci une personne pouvait m’aider pour l’histoire de la fonction system.

Meci

http://perso.wanadoo.fr/iar/IA.html

13 réponses

Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
ShellExecute() devré allé
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Salut Anacr0x, serais tu en conflit avec la grammaire ?
BruNews, ciao...
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
oups... je sais que beaucoup de personne n'aime pas ça, mais j'ai pour habitude d'écrire à la manière sms, ça permet de gagner pas mal de temps sur les chat et autre !
Alors je m'excuse par avance, mais je ne fais pas souvent (je dirais même rarement) attention à ce que j'écris...

PS : tu remarquera quand même que là j'ai fais un effort (^_^)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
OK, plus que 2 fautes dans PS.
Tu es en bonne voie pour le certificat d'études.
Mince alors, parait qu'il n'existe plus.
BruNews, ciao...
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
rectification : tu remarqueras quand même que là j'ai fait un effort

vouaalaaaa !!! je suis prêt pour le certificat !

Mais bon, si on arrétait de parler français, j'ai déjà un commentaire composé qui va me ruiner mes vacances et ça me traumatise bien assez comme ça ;)
Si seulement je pouvais avoir des intérots sur du C/C++ ça me motiverait un peu plus, j'ai hate d'être en IUT info et quitter ce bahut minable...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
En terminale S normalement tu commences a faire du C (depend des options que tu as pris en fait).
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
euh... en fait jsuis encore en première, je viens de retapé(non, ne riez pas svp...) et bien que je sois également en S, je n'ai jamais entendu parler de C en terminale, la seule options un peu informatique qui existe est le MPI qui s'arrète après la seconde (c'est trop facile et inintéressant d'ailleurs), j'ai beau chercher je n'en vois pas d'autre
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ben moi j'y etais encore en 1ere il y a peu...
Tout juste 30 ans, et on ne rit pas non plus.
BruNews, ciao...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
C'est dans l'option SI Sciences de l'Ingénieur, qui commence a partir de la 1ere.
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
Ah ! Ben tant pis, je ne peut pas me débarasser de l'espagnol (où je suis loin d'être bon) et prendre SI en terminale je suppose, donc j'ai pas trop le choix (ou alors il faudrait que je redouble encore une fois mais c'est hors de question)
Messages postés
334
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
3 juillet 2010

Ça chat dure de Français, moi aussi je ne suis pas une bette.
J’essaye d’en supprimer le plus possibles.
(j'ai reçu 10 E-mail lol, au début je me suis posé des questions, maintenant je comprend lol)

Ci non, je vais essayer ShellExecute()
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
lol, désolé de monopoliser la conversation qui n'a maintenant plus grand chose a voir avec ta question (^_^)
Messages postés
4
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
26 avril 2004

voila, jai utilisé la source, en changeant bien le system() par le ShellExecute et ca me donne ca =>

int ping ( char ip [ 17 ] )
{
int result = 0; // declare result et l'initialise à 0

FILE * temp1 = fopen ( "Y:\\Textile\\PingTextile v9\\ping\\pingping.bat" , "w+" );

char commande [ 45 ]; // tableau contenant la commande a envoyer
strcpy ( commande , "ping " ); //
strcat ( commande , ip ); // insertion de l'ip envoyé en parametre dans la commande
strcat ( commande , " -n 1 -i 1 -w 1 > temp1" ); // insertion des paramètres envoyé avec la commande ping

fwrite( commande , sizeof ( char ) , 45 , temp1 );
fclose ( temp1 );

ShellExecute ( NULL , "open" , "Y:\\Textile\\PingTextile v9\\ping\\pingping.bat" , "" , "" , SW_HIDE );

//Sleep ( 200 );

FILE * temp2 = fopen ( "Y:\\Textile\\PingTextile v9\\ping\\temp1" , "r" ); // declare un pointeur temp2 sur le fichier temp1
char test [ 50 ]; // declaration d'un tableau test
while ( !feof ( temp2 )) // on parcour le fichier
{
fscanf ( temp2 , "%s" , test ); // récupére une chaine qui correspond a un mot
if ( strcmp ( test , "octets=32" ) == 0 ) // si ce mot vaut octets=32, on défini result à 1
{
result = 1;
}
}
fclose ( temp2 ); // ferme temp2

return result; // on retourne la valeur de result
}

mais le pb cé kan je fait un apel a cette fonction ping a l'aide de ca (je suis en MFC) =>

void CPingDlg::OnPC1()
{
char ip [ 17 ];
strcpy ( ip , "192.168.100.11" );
int result = ping ( ip ); // envoi 'ip' en parametre à la fonction ping
if ( result 0) // affiche Offline si result 0
{
m_result1 = "Offline";
}
else
{if ( result 1) // affiche Online si result 1
{
m_result1 = "Online";
}
}

UpdateData ( FALSE );
}

et ben, je suis obligé de cliké 2 foi sur le bouton, pour avoir le vrai resultat ! il doit il y avoir un pb de "Updatedata" mais je voi pa ou ! (je me sui pa trompé sous MFC, jai bien mi le truc dan OnClik et pa OnDoubleClik) !! voila voila !!

merci davance !!