Projet en C: cree un fichier de configuration

poparnassus Messages postés 462 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    1. poparnassus Messages postés 462 Statut Membre 31
       
      Ok je vais voir ça tout de suite !

      Je te remercie Dal , tu as toujours réponse à tout !!
      0
    2. poparnassus Messages postés 462 Statut Membre 31
       
      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() ...
      0
    3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
      0