1#include "confuse.h" 2#include <string.h> 3#include <signal.h> 4#include <unistd.h> 5 6cfg_t *cfg = 0; 7const char *config_filename = "./reread.conf"; 8 9void read_config(void) 10{ 11 cfg_opt_t arg_opts[] = { 12 CFG_STR("value", "default", CFGF_NONE), 13 CFG_END() 14 }; 15 cfg_opt_t opts[] = { 16 CFG_INT("delay", 3, CFGF_NONE), 17 CFG_STR("message", "This is a message", CFGF_NONE), 18 CFG_SEC("argument", arg_opts, CFGF_MULTI | CFGF_TITLE), 19 CFG_END() 20 }; 21 int ret; 22 23 char *buf = "" \ 24 " delay = 3\n" \ 25 "# message = \"asdfasfasfd tersf\"\n" \ 26 " argument one { value = 1 }\n" \ 27 " argument two { value=foo}\n"; 28 29 cfg_free(cfg); 30 31 cfg = cfg_init(opts, 0); 32 ret = cfg_parse_buf(cfg, buf); 33 ret = cfg_parse(cfg, config_filename); 34} 35 36void sighandler(int sig) 37{ 38 read_config(); 39 signal(SIGHUP, sighandler); 40} 41 42static int loop = 1; 43 44void usr1handler(int sig) 45{ 46 loop = 0; 47} 48 49int main(void) 50{ 51 unsigned int i; 52 53 read_config(); 54 signal(SIGHUP, sighandler); 55 signal(SIGUSR1, usr1handler); 56 57 while(loop) 58 { 59 printf("Message: %s", cfg_getstr(cfg, "message")); 60 for(i = 0; i < cfg_size(cfg, "argument"); i++) 61 { 62 cfg_t *arg = cfg_getnsec(cfg, "argument", i); 63 printf(", %s", cfg_getstr(arg, "value")); 64 } 65 printf("\n"); 66 67 sleep(cfg_getint(cfg, "delay")); 68 } 69 70 cfg_free(cfg); 71 cfg = 0; 72 73 return 0; 74} 75