HELP! Parser un fichier de conf et renvoyer vers struct

HELP! Parser un fichier de conf et renvoyer vers struct - C - Programmation

Marsh Posté le 25-02-2007 à 11:29:58    

Bonjour,
 
je suis pas programmeur dans l ame car faisant du reseau, mais aujourdhui, exceptionnellement j ai besoin de trouver une fonction en C qui parse un fichier (avec awk ou une autre facon, peu importe le tout cest que ca marche lol) et qui renvoie certains champs dans des variables. Dont un champs precisement (qui est l adresse l'IP) que je dois renvoyer vers une structure qui correspond en fait à l a structure de la socket (en TCP).
 
la personne qui connait un programme type ou une URL ou trouver ca m aidera grandement !!!! parce que je recherche comme un fou et j ai pas trouvé et je n ai pas le temps de devenir un expert en C, c est surtout ca le probleme.
 
je remercie tous ceux qui pourront eventuellement m aider.
 


---------------
collectionneur averti !! Accepte vos vieilles consoles non utilisées ^^        
Reply

Marsh Posté le 25-02-2007 à 11:29:58   

Reply

Marsh Posté le 25-02-2007 à 11:47:07    

man getopt

Reply

Marsh Posté le 25-02-2007 à 13:05:49    

pinpin06 a écrit :

Bonjour,
 
je suis pas programmeur dans l ame car faisant du reseau, mais aujourdhui, exceptionnellement j ai besoin de trouver une fonction en C qui parse un fichier (avec awk ou une autre facon, peu importe le tout cest que ca marche lol) et qui renvoie certains champs dans des variables. Dont un champs precisement (qui est l adresse l'IP) que je dois renvoyer vers une structure qui correspond en fait à l a structure de la socket (en TCP).
 
la personne qui connait un programme type ou une URL ou trouver ca m aidera grandement !!!! parce que je recherche comme un fou et j ai pas trouvé et je n ai pas le temps de devenir un expert en C, c est surtout ca le probleme.
 
je remercie tous ceux qui pourront eventuellement m aider.


 
Bref tu veux une fonction qui fasse tout tout seul => Faut que tu te la fasses toi-même
1) tu ouvres ton fichier de conf => fopen()
2) tu lis ton fichier de conf ligne par ligne => fgets()
3) sur ta ligne, tu recherches le caractère qui sépare le nom de sa valeur (en général un fichier de conf est écrit dans le style "nom=valeur" donc tu cherches le "=" ) => strchr() => ça te renvoie un pointeur sur l'octet qui contient ce "=" (que je vais nommer "info" pour plus de simplicité)
4) tu mets cet octet à 0 et tu positionnes "info" sur l'octet suivant (il suffit de faire "info++" ) => tu te trouves maintenant avec 2 variables: "ligne" qui contient "nom" (et qui s'arrête au "=" car c'est devenu "0" ) et ton pointeur "info" qui contient la valeur du nom
5) tu compares "ligne" avec la chaine que tu recherches => strcmp() et si c'est bon tu recopies l'info qui est pointée par "info" => strcpy()
6) quand toutes les lignes ont été lues, tu fermes le fichier => fclose()
 
Tu peux améliorer l'algo en ignorant les commentaires : en général un commentaire dans un fichier de conf commence par "#" donc tu peux commencer par chercher ce "#" dans ta ligne (strchr()) et remplacer ce "#" par 0 => ta ligne s'arrêtera automatiquement juste avant le commentaire


Message édité par Sve@r le 25-02-2007 à 13:06:49

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-02-2007 à 13:53:40    

merci pour toutes ces infos c est sympa. comment je fais pour stocker l' info de l adresse IP (recuperee dans le fichier de conf) dans une structure ( celle pour ouvrir le socket) ... desolee de ces questions bateuax mais le c et moi c fait 2... je bosse plutto sur des routers/switches/firewall :(

Reply

Marsh Posté le 25-02-2007 à 15:01:39    

pinpin06 a écrit :

merci pour toutes ces infos c est sympa. comment je fais pour stocker l' info de l adresse IP (recuperee dans le fichier de conf) dans une structure ( celle pour ouvrir le socket) ... desolee de ces questions bateuax mais le c et moi c fait 2... je bosse plutto sur des routers/switches/firewall :(


 
Ben tu récupères une chaîne de caractères style "160.192.10.5". Ensuite ça dépend de comment est faite ta structure. Je présume qu'elle doit avoir 4 champs donc
1) il faut que tu parses ta chaîne sur le caractère "." et que tu stockes 3 pointeurs diférents sur chaque début de chiffre et que tu remplaces chaque "." par un 0 donc tu transformes ta chaîne "160.192.10.5" en 4 chaînes "160", "192", "10", "5"
2) tu transformes chaque chaîne en nombre (strtoul() ou sscanf()) que tu transfères dans l'octet qui va bien de ta structure


Message édité par Sve@r le 25-02-2007 à 16:08:19

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-02-2007 à 10:35:46    

merci merci :) je vois a peu pret, je vais essayer de mettre tout ca en place maintenant. merci pour ts les explications !

Reply

Sujets relatifs:

Leave a Replay

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