Projet en C: cree un fichier de configuration [Fermé]

Signaler
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
Messages postés
5583
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
9 juillet 2021
-
Bonjour,

je developpe en C avec codeblock, et je suis sur les sockets, du coup je voudrais crée un fichier qui soit configurable pour les adresse ip , port etc;

j'ai trouver ca comme info mais cest avec visual
https://nico-pyright.developpez.com/tutoriel/vc2005/configurationsectioncsharp/

Comment on procede avec codeblock ?

1 réponse

Messages postés
5583
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
9 juillet 2021
942
Salut poparnassus,

Si c'est pour ton projet utilisant la SDL, tu peux installer SDL_Config et créer un fichier au format .ini

http://koshmaar.linuxpl.info/sdl_config/news.php
https://fr.wikipedia.org/wiki/Fichier_INI

cela te donnera un code portable sur les plateformes supportées par la SDL

Si tu fais du code spécifique Windows, tu peux aussi utiliser GetPrivateProfileString : https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofilestring?redirectedfrom=MSDN

Les fichiers .ini sont les ancêtres de la base de registre sous Windows.

Le format est assez simple, et si tu n'as pas des besoins complexes, tu peux même parser toi même le fichier.


Dal
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
28
Ok je vais voir ça tout de suite !

Je te remercie Dal , tu as toujours réponse à tout !!
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
28
J'avais poster sur un autre forum et on m'a dit de faire comme ca, tu en penses quoi ? Cest une bonne methode ?



FILE *fopen(constchar*filename,constchar*mode)
int fscanf(FILE *stream,constchar*format,...) :
par exemple un fichier texte nommé exemple et situé dans le même répertoire que ton exécutable qui contient :

ip 1.1.1.1  


<br>#include <stdio.h>
#include <stdlib.h>

int main(){
FILE *fichier;
char champ[50];
char ip[50];
fichier = fopen("exemple.txt", "r");
if(fichier!=NULL){
fscanf(fichier,"%s %s", champ, ip);
printf("Le premier champ est une %s et le paramètre est : %s\n", champ, ip);
}
else{
printf("Le fichier n'existe pas\n");
}
}


-
Edité par Magarto 2 mai 2017 à 14:55:01


magma

Signaler Citer
2 mai 2017 à 15:09:29

Tu peux mettre tous les paramètres dont tu as besoin dans une structure et écrire/lire cette structure d'un seul coup avec les fonctions fwrite()/fread() ...
Messages postés
5583
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
9 juillet 2021
942
Pour la suggestion de "magma", si tu veux un fichier pour les humains, fwrite / fread pour stocker les struct sous forme binaire ne va pas remplir ce besoin. De plus les données ne seront utilisables que sur la même architecture.

Ecrire sous forme de texte, avec un format simple est ce que je te proposais avec un format connu et des parsers existants, ou ton propre parser, et, bien sûr, tu peux faire ton propre format encore plus simplifié.

Les humains ont souvent besoin de commentaires, tu peux par exemple déterminer que les lignes vides, ou commençant par un ";" (à la Windows) ou un "#" (à la Unix) sont ignorées, et contiennent des commentaires, ou que si ces caractères sont rencontrés dans une ligne ce qui suit ce caractère jusqu'à la fin de la ligne est un commentaire.

Sur le code lui-même, en dehors du fait que le prototype
main()
est incorrect et que le
return 0;
est manquant, le code n'est pas très robuste, et il faudrait complexifier un peu pour faire une gestion d'erreurs.

J'utiliserais
fgets()
pour lire une ligne, et ensuite je parserais la ligne avec
sscanf()
pour vérifier son format et l'interpréter. Si la ligne est plus longue que tampon de lecture (à ce moment là le dernier caractère du tampon ne sera pas '\n'), tu pourras aussi décider quoi faire de ce que tu as lu et du reste de la ligne, voire considérer de tout ignorer et considérer qu'une ligne plus longue qu'une certaine taille est une erreur de format (sauf si c'est un commentaire qui occasionne cela).

Les parsers déjà faits doivent normalement gérer toutes ces situations..., et gèrent non seulement la lecture, mais aussi l'écriture. A toi de voir :-)

Sinon, parmi les formats populaires, aujourd'hui la mode est plutôt à YAML, qui a libyaml pour le C. C'est peut-être un tank pour battre une mouche dans ton cas, mais c'est vraiment sympa à utiliser et très lisible même pour représenter des choses complexes.


Dal