Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303677
  • 博文数量: 42
  • 博客积分: 2718
  • 博客等级: 少校
  • 技术积分: 467
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-19 10:23
个人简介

青 田 酒 店 服 务 小 姐 价 格 186-6531-7773

文章分类

全部博文(42)

文章存档

2011年(36)

2010年(6)

分类: LINUX

2011-06-16 15:59:19

学习/proc/sys下配置的存储方式,个人总结有以下优点:
第一:按照用途分类,易于理解,逻辑清楚
第二:树形结构存储,方便查找,易于修改
第三:一个文件存储一个配置,易于远程修改,如果你把几十个配置存进一个文件中,要远程修改几十台,那是很头疼的事情,如果一个文件一个配置的话,那么只需要如下方式:
 
  1. ssh root@10.10.10.10 --cmd "echo 12345 >/etc/cmtools/sys/port"
  1. ssh root@111.11.11.11 --cmd "echo local5 > /etc/cmtools/syslog/facility"
就把端口值修改为12345了。很方便.
 
代码功能如下:
如果能够找到配置,就读取出来,返回。
如果不存在,就创建文件,把默认值存下来,并且返回默认值。
 
缺点:不支持多线程,函数中用了static char []
代码如下:
  1. //created by duanjigang@2011-06-16
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <libgen.h>
  6. #include <string.h>

  7. char*    get_conf(const char* path, const char* dft)
  8. {
  9.     static char szret[256] = {0};
  10.     char szpath[512] = {0}, szpath1[512] = {0};
  11.     memset (szret, 0, sizeof(szret));
  12.     if (strlen(path) > 512)
  13.     {
  14.         printf ("path too long %d\n", strlen(path));
  15.         sprintf (szret, dft);
  16.         return szret;
  17.     }    
  18.     sprintf (szpath, "/etc/%s", path);
  19.     int len = strlen(szpath);
  20.     int i = 0;
  21.     for (i = 0; i < len; i++)
  22.     {
  23.         if (szpath[i] == '.') szpath[i] = '/';
  24.     }
  25.     //printf ("%s:%d\n", szpath, strlen(szpath));
  26.     if (access(szpath, R_OK))
  27.     {
  28.         char szdir[512] = {0};
  29.         strcpy (szpath1, szpath);
  30.         sprintf (szdir, "mkdir -pv %s", dirname(szpath1));
  31.         system (szdir);        
  32.         FILE * fp = fopen (szpath, "w");
  33.         if (fp)
  34.         {
  35.             fprintf (fp, "%s", dft);
  36.             fclose (fp);
  37.         }
  38.         sprintf (szret, dft);
  39.         return szret;
  40.     }
  41.     int ok = 1;
  42.     FILE * fp = fopen (szpath, "r");
  43.     if (fp)
  44.     {
  45.         if (fgets(szret, sizeof(szret), fp))
  46.         {
  47.             fclose (fp);
  48.             return szret;
  49.         }else
  50.         {
  51.             ok = 0;
  52.         }
  53.     }else ok = 0;
  54.     
  55.     if (!ok)
  56.     {
  57.         FILE * fp = fopen (szpath, "w");
  58.         if (fp)
  59.         {
  60.             fprintf (fp, "%s", dft);
  61.             fclose (fp);
  62.         }
  63.         sprintf (szret, dft);
  64.     }
  65.     return szret;
  66. }

  67. int main()
  68. {
  69.     printf ("cmtools.test_conf.var1=%s\n", get_conf("cmtools.test_conf.var1", "value1"));
  70.     printf ("cmtools.test_conf.var2=%s\n", get_conf("cmtools.test_conf.var2", "value2"));
  71.     printf ("cmtools.test_conf1.var1=%s\n", get_conf("cmtools.test_conf.var1", "value1"));

  72.     printf ("cmtools.test_conf.var1=%s\n", get_conf("cmtools.test_conf.var1", "aaa"));
  73.     printf ("cmtools.test_conf.var2=%s\n", get_conf("cmtools.test_conf.var2", "bbb"));
  74.     printf ("cmtools.test_conf1.var1=%s\n", get_conf("cmtools.test_conf1.var1", "ccc"));
  75.     return 1;
  76. }
阅读(2476) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~