Questions diverses [ICMP, SNMP, WoL, returns, ...]
Salut :)
Bon voilà, j'aimerais bien quelques conseils de votre part...
Tout d'abord, j'aimerais savoir comment bien utiliser les outils permettant de sortir d'une fonction, j'entend par là return et exit().
Pour le moment, je travaille de cette manière :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int
ma_fonction_exemple(void)
{
FILE *fp = NULL;
/* Valeur de retour */
int ret_value = EXIT_SUCCESS;
/* Appels de fonctions, etc. Par exemple : */
fp = fopen("monfichier.dat", "rb");
if(fp != NULL)
{
/* Traitement */
fclose(fp);
}
else
{
fprintf(stderr, "Erreur !");
ret_value = EXIT_FAILURE;
}
return ret_value;
} |
Le seul inconvénient que je trouve actuellement à cette méthode est que l'on s'y perd assez rapidement, et que ça peut devenir assez pénible à décoder dans certains cas...
Parcontre il m'est souvent arrivé de lire ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| int
ma_fonction_exemple(void)
{
FILE *fp = NULL;
/* Appels de fonctions, etc. Par exemple : */
fp = fopen("monfichier.dat", "rb");
if(fp == NULL)
{
fprintf(stderr, "Erreur !");
return EXIT_FAILURE;
/* Je retrouve aussi la forme suivante :
exit(-1);
*/
}
/* Traitement */
fclose(fp);
return EXIT_SUCCESS;
} |
Est-ce que cette dernière méthode est conseillée/propre ? L'utilisez-vous ? Si oui, pourquoi ?
Ensuite, j'aimerais votre avis sur la fonction suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| int
get_hw_addr(struct ether_addr *mac, char *s)
{
char *p = NULL;
char delim[] = ":";
int ret_value = EXIT_SUCCESS;
int i = 0;
/* Premier octet */
p = strtok(s, delim);
if(p != NULL)
mac->octet[i] = (u_char)strtol(p, NULL, 16);
else
ret_value = EXIT_FAILURE;
i++;
/* 5 octets suivants */
while(i < 6 && p != NULL)
{
p = strtok(NULL, delim);
if(p != NULL)
mac->octet[i] = (u_char)strtol(p, NULL, 16);
else
ret_value = EXIT_FAILURE;
i++;
}
return ret_value;
} |
C'est une fonction qui découpe la chaine de caractère fournie en paramètre en adresse ethernet. Ce résultat est stocké sous la forme d'une struct ether_addr (dont j'ai imité la forme, car je travaille sous Windows).
Pour le moment, j'ai quelques problèmes : je ne sais pas comment repérer toutes les erreurs qui pourraient intervenir... Par exemple si on utilise une lettre ne faisait pas partie de l'intervalle hexadécimal, strtol renvoie 0, et donc mon adresse ethernet comportera l'octet 0, ce qui n'était pas voulu...
Je voudrais aussi savoir si mon utilisation de strtok est correcte ?
Merci d'avance pour vos conseils :)
Fred