рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ред Libconfig рдкреБрд╕реНрддрдХрд╛рд▓рдп

рдкрд░рд┐рдЪрдп


рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдИрдПрдирдЖрдИ рдлрд╛рдЗрд▓ рдпрд╛ рдЬрд╕рди рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡реЗ рдЕрд╕рд╣рдЬ рдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдереЗ, рдпрд╛ рд╕рд╛рдЗрдХрд┐рд▓ред рдФрд░ рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдмрд╣реБрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫрд╛, рддреЛ рдЙрд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд┐рдпрд╛ред рд╡рд╣ рдпрдо рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдЬреЛрдВрд╕ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреА рд╣реИред



рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ: рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╡рд╕реНрддреБред рд╡реЗ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рдЪреВрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдорддрднреЗрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред


рд╕реЗрдЯрдЕрдк рдФрд░ рдХрдиреЗрдХреНрд╢рди
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
C рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕реА ++ рдореЗрдВ рдЙрдкрдпреЛрдЧ

рд╕реЗрдЯрдЕрдк рдФрд░ рдХрдиреЗрдХреНрд╢рди


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдерд╛рдкрдирд╛ рд╕рд░рд▓ рд╣реИ:
$ sudo aptitude install libconfig8 libconfig8-dev libconfig++ libconfig++-dev 


рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, C ++ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ:
 #include <libconfig.h++> 

рдпрд╛
 #include <libconfig.hh> 

рдпрд╛ C рдХреЗ рд▓рд┐рдП
 #include <libconfig.h> 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
 # Example application configuration file version = "1.0"; application: { window: { title = "My Application"; size = { w = 640; h = 480; }; pos = { x = 350; y = 250; }; }; list = ( ( "abc", 123, true ), 1.234, ( /* an empty list */) ); books = ( { title = "Treasure Island"; author = "Robert Louis Stevenson"; price = 29.95; qty = 5; }, { title = "Snow Crash"; author = "Neal Stephenson"; price = 9.99; qty = 8; } ); misc: { pi = 3.141592654; bigint = 9223372036854775807L; columns = [ "Last Name", "First Name", "MI" ]; bitmask = 0x1FC3; }; }; 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
рддрддреНрд╡ (рд╕реЗрдЯрд┐рдВрдЧ)
рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдиреНрдпреВрдирддрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдХрд╛ рд░реВрдк рд╣реИ:
 name = value; 

рдпрд╛
 name : value 

рд╕рдореВрд╣ (рд╕рдореВрд╣)

рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ:
 { settings... } 

рдРрд░реЗ (Arrays)

рд╡реЗ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реВрдиреНрдп рднреА, рд▓реЗрдХрд┐рди рд╕рднреА рддрддреНрд╡реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рд░рдгреА рдХреЗ рднреАрддрд░ рдПрдХ рд╣реА рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ:
 [ value, value ... ] 

рд╕реВрдЪреА (рд╕реВрдЪрд┐рдпрд╛рдВ)

рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрдХреЗрд▓рд░ рддрддреНрд╡, рд╕рд░рдгрд┐рдпрд╛рдБ, рд╕рдореВрд╣ рдпрд╛ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВред рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
 ( value, value ... ) 

рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди (рдкреВрд░реНрдгрд╛рдВрдХ)

рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рджрд╢рдорд▓рд╡ рддрд░реАрдХреЗ (written 0-9) рдпрд╛ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ (0xA-f) рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди -2147483648..2147483647 (32 рдмрд┐рдЯ) рд╕реАрдорд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдмрдбрд╝реА рд░реЗрдВрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ 'рдПрд▓' рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
 3578934 897893450934L 

рдЖрдВрд╢рд┐рдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ (рдлреНрд▓реЛрдЯреНрд╕)

рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рджрд░реНрдЬ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 3.1415 

'рдИ' рдХреЗ рд╕рд╛рде рдШрд╛рддреАрдп рд╕рдВрдХреЗрддрди рдорд╛рдирдХ рд╣реИред
рдмреБрд▓рд┐рдпрди рд╡реИрд▓реНрдпреВ (рдмреБрд▓рд┐рдпрди)

рдорд╛рдиреЛрдВ рдХреЛ 'рд╕рд╣реА' рдпрд╛ 'рдЧрд▓рдд' рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ (рдмрд┐рдирд╛ рдЙрджреНрдзрд░рдг рдХреЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рд╣реЛрддреЗ рд╣реИрдВред
рд▓рд╛рдЗрдиреНрд╕ (рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕)

рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ
 "     " 
ред
рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдорд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рд╣реЛрдЧрд╛:
 "  " "  " 

 "  " /*  */ "  " //  " " 
ред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, C ++ рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ:

рдмрд╛рд╣рд░реА рдХрдиреЗрдХреНрд╢рди (рд╢рд╛рдорд┐рд▓)

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╣реИред
 # file: quote.cfg quote = "Criticism may not be agreeable, but it is necessary." " It fulfils the same function as pain in the human" " body. It calls attention to an unhealthy state of" " things.\n" "\t--Winston Churchill"; 

 # file: test.cfg info: { name = "Winston Churchill"; @include "quote.cfg" country = "UK"; }; 


рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд╛рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рд╕рдорд╛рди рд╣реИрдВ, рдФрд░ рдореБрдЦреНрдп рдмрд╛рд░реАрдХрд┐рдпреЛрдВред

рдиреАрдЪреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг

 #include <stdio.h> #include <stdlib.h> #include <libconfig.h> /*      'example.cfg'     */ int main(int argc, char **argv) { /*   . */ config_t cfg; config_setting_t *setting; const char *str; config_init(&cfg); /*   */ /*  .  ,    */ if(! config_read_file(&cfg, "example.cfg")) { fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg)); config_destroy(&cfg); return(EXIT_FAILURE); } /*    "name". */ if(config_lookup_string(&cfg, "name", &str)) printf("Store name: %s\n\n", str); else fprintf(stderr, "No 'name' setting in configuration file.\n"); /*     . */ setting = config_lookup(&cfg, "inventory.books"); if(setting != NULL) { int count = config_setting_length(setting); int i; printf("%-30s %-30s %-6s %s\n", "TITLE", "AUTHOR", "PRICE", "QTY"); for(i = 0; i < count; ++i) { config_setting_t *book = config_setting_get_elem(setting, i); /*    ,      . */ const char *title, *author; double price; int qty; if(!(config_setting_lookup_string(book, "title", &title) && config_setting_lookup_string(book, "author", &author) && config_setting_lookup_float(book, "price", &price) && config_setting_lookup_int(book, "qty", &qty))) continue; printf("%-30s %-30s $%6.2f %3d\n", title, author, price, qty); } putchar('\n'); } /*     . */ setting = config_lookup(&cfg, "inventory.movies"); if(setting != NULL) { unsigned int count = config_setting_length(setting); unsigned int i; printf("%-30s %-10s %-6s %s\n", "TITLE", "MEDIA", "PRICE", "QTY"); for(i = 0; i < count; ++i) { config_setting_t *movie = config_setting_get_elem(setting, i); /*    ,     . */ const char *title, *media; double price; int qty; if(!(config_setting_lookup_string(movie, "title", &title) && config_setting_lookup_string(movie, "media", &media) && config_setting_lookup_float(movie, "price", &price) && config_setting_lookup_int(movie, "qty", &qty))) continue; printf("%-30s %-10s $%6.2f %3d\n", title, media, price, qty); } putchar('\n'); } config_destroy(&cfg); /*   ,      */ return(EXIT_SUCCESS); } 


рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╡рд░рдг

рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдгред

config_t - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдпрд╣ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИ)ред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ред
config_setting_t - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдЗрдЯрдо рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯред рдЙрджрд╛рд╣рд░рдг рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд▓реМрдЯрд╛рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
int config_read_file (config_t * config, const char * filename) - рдлрд╝рдВрдХреНрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рдлрд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк config_t рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд config_read_string () рдХреЛ рд▓рд╛рдЗрди "рдлрд╝реАрдб" рдХрд░реЗрдВ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ config_read () рджреЗрдВ
int config_lookup_string (const config_t * config, const char * path, const char ** value) - рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдкрде рдкрде рдкрд░ config config рдХреЗ рдЕрдВрджрд░ рдПрдХ рдорд╛рди рджреЗрддрд╛ рд╣реИред
config_setting_t * config_lookup (const config_t * config, const char * path) - рджрд┐рдП рдЧрдП рдЖрдВрддрд░рд┐рдХ рдкрде рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
config_setting_t * config_setting_get_elem (const config_setting_t * рд╕реЗрдЯрд┐рдВрдЧ, рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ рдЗрдВрдбреЗрдХреНрд╕) - рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░рдо рдореЗрдВ рдРрд╕реЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА
int config_setting_lookup_string (рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ config_setting_t * рд╕реЗрдЯрд┐рдВрдЧ, рдХрд╛рд╕реНрдЯ char * name, const char ** value * -
рджрд┐рдП рдЧрдП рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд╛рдо рддрддреНрд╡ рдХреЗ рдмрдЪреНрдЪреЗ рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдЬрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
int config_setting_get_int (const config_setting_t * рд╕реЗрдЯрд┐рдВрдЧ)

C ++ API


рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди C ++ рдореЗрдВред рд╕рд╛рдЗрдЯ рдкрд░ рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди

 #include <iostream> #include <iomanip> #include <cstdlib> #include <libconfig.h++> using namespace std; using namespace libconfig; // ,    'example.cfg'     int main(int argc, char **argv) { Config cfg; //  .     //   ++   ,    try { cfg.readFile("example.cfg"); } catch(const FileIOException &fioex) { std::cerr << "I/O error while reading file." << std::endl; return(EXIT_FAILURE); } catch(const ParseException &pex) { std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine() << " - " << pex.getError() << std::endl; return(EXIT_FAILURE); } //   . try { string name = cfg.lookup("name"); cout << "Store name: " << name << endl << endl; } catch(const SettingNotFoundException &nfex) { cerr << "No 'name' setting in configuration file." << endl; } const Setting& root = cfg.getRoot(); //     . try { const Setting &books = root["inventory"]["books"]; int count = books.getLength(); cout << setw(30) << left << "TITLE" << " " << setw(30) << left << "AUTHOR" << " " << setw(6) << left << "PRICE" << " " << "QTY" << endl; for(int i = 0; i < count; ++i) { const Setting &book = books[i]; //    ,     . string title, author; double price; int qty; if(!(book.lookupValue("title", title) && book.lookupValue("author", author) && book.lookupValue("price", price) && book.lookupValue("qty", qty))) continue; cout << setw(30) << left << title << " " << setw(30) << left << author << " " << '$' << setw(6) << right << price << " " << qty << endl; } cout << endl; } catch(const SettingNotFoundException &nfex) { // Ignore. } //     . try { const Setting &movies = root["inventory"]["movies"]; int count = movies.getLength(); cout << setw(30) << left << "TITLE" << " " << setw(10) << left << "MEDIA" << " " << setw(6) << left << "PRICE" << " " << "QTY" << endl; for(int i = 0; i < count; ++i) { const Setting &movie = movies[i]; //   ,    . string title, media; double price; int qty; if(!(movie.lookupValue("title", title) && movie.lookupValue("media", media) && movie.lookupValue("price", price) && movie.lookupValue("qty", qty))) continue; cout << setw(30) << left << title << " " << setw(10) << left << media << " " << '$' << setw(6) << right << price << " " << qty << endl; } cout << endl; } catch(const SettingNotFoundException &nfex) { // Ignore. } return(EXIT_SUCCESS); } 

рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд, рдХреЗрд╡рд▓ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд░реВрдЯ рддрддреНрд╡ cfg.getRoot () рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ; рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд╣ рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рд▓рдЧрднрдЧ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдлреЗрдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрдврд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреАрдЖрдИ рдореАрдбрд┐рдпрд╛ рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди [en] рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИред

рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдЖрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 $ apt-get source libconfig++ 

рдпрд╛ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╕реЗред

рдкреНрд░рд▓реЗрдЦрди HTML рдФрд░ рдкреАрдбреАрдПрдл рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
GNU LGPL рд▓рд╛рдЗрд╕реЗрдВрд╕ред

Source: https://habr.com/ru/post/In148948/


All Articles