nixp.ru v3.0

20 октября 2017,
пятница,
15:44:01 MSK

DevOps с компанией «Флант»
ROM написал 30 мая 2007 года в 22:06 (603 просмотра) Ведет себя как мужчина; открыл 33 темы в форуме, оставил 63 комментария на сайте.

Может завалялся у кого код на С для чтения конфигурационного файла в виде

параметр=значение ?

fly4life
ROM
Может завалялся у кого код на С для чтения конфигурационного файла в виде

параметр=значение ?

А-то под линукс их мало?

ROM

а где?

гуглил — один хлам

fly4life

Какая тебе разница, хлам или не хлам? Тебе нужна та, которая написана на C и у которой есть конфигурационный файл.

В качестве альтернативы гугления можно посоурсфорджить. В смысле, на sourceforge.net взять первый попавшийся проект и, если тебе настколько «повезёт», что в нём нет конфигурационного файла, то взять следующий.

Code Monkey

имхо оффтоп, перенести в раздел выше

ROM

брал за основу binkd но там так мудрёно =(

Steck

у меня где-то валялся самописный, если найду то выложу

metal
ROM
Может завалялся у кого код на С для чтения конфигурационного файла в виде

параметр=значение ?

Ключевое слово libconfig.

что-то вроде этого:

config_file = fopen(name, "r");
    if(config_file)
    {
      config_t r_conf;
      const char* bd_name;
      config_init(&r_conf);
      if(config_read(&r_conf, config_file)
            == CONFIG_FALSE)
      {
        fprintf(
            stderr,
            "error on reading config file: %s, in line %d\n",
            config_error_text(&r_conf),
            config_error_line(&r_conf));
        exit(1);
      }
      bd_name = config_lookup_string (&r_conf, "bd.name");
      if(bd_name)
      {
        config->bd_name = strdup(bd_name);
        //printf("bd_name=%s", bd_name);
      }
      config_destroy(&r_conf);
      fclose(config_file);
    }
Steck


#include 
void ParseIniFile(FILE *fp,  char *section, char *value)
{
      const int       size = 100;
      char           *word, Ret[256],secondRet[256], *Key, *StrValue;
      word = (char *)malloc(sizeof(char) * size);
      fseek(fp,0, SEEK_SET);
            while (!feof(fp))
      {
            fgets(word, sizeof(char) * size, fp);
            if (!strstr(word, section) || (word[0] == ';'))
                  continue;
            else
            {
                  while (fgets(Ret, 256, fp))
                  {
                                          strncpy(secondRet,Ret,256);
                                          StrValue = strtok(secondRet,"=");
                              if (!strstr(StrValue, value) || (Ret[0] == ';'))
                              continue;
                        else
                        {
                                                Key = (strchr(Ret,'=') + 1);
                                                printf(Key);
                              break;
                        }
                  }
            }
      }
      free(word);
}
main()
{
                        FILE *IniFile;
                        IniFile = fopen("TEST.ini","r");
                        ParseIniFile(IniFile,"[IM]","ICQ");
                        ParseIniFile(IniFile,"[USER]","Login");
                        ParseIniFile(IniFile,"[USER]","Mail");
                        ParseIniFile(IniFile,"[USER]","Passsword");
                        ParseIniFile(IniFile,"[OS]","System");
                        fclose(IniFile);
}

Пример файла TEST.ini

[OS]
System=FreeBSD
[USER]
;
Mail=steck[gav]wormhole[dot]ru
; Fucking comment
Login=Steck
Password=******
[IM]
ICQ=3102718

Примитивно конечно , но где то я этот кусок юзал =))

bugmaker

http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html

rgo
Steck
Примитивно конечно , но где то я этот кусок юзал =))

Фигасе примитивно! Примитивно — это так:

#include 
#include 
int main ()
{
      char name[32], value[32];
      while (1) {
            scanf ("%*[ \t\n]");
            scanf ("%32[^=]=%32s", name, value);
            printf ("`%s'=`%s'\n", name, value);
      }
      return 0;
}

;)

shks57

Хорошая штука libini. Найти можно здесь же, на www.nixp.ru.