免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1463 | 回复: 2
打印 上一主题 下一主题

[学习分享] Linux中有类似Windows中ini配置文件的东西么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-20 10:08 |只看该作者 |倒序浏览
我的程序中想要实现一个自动备份的功能

当用户插入U盘后,程序自动读取U盘中的配置文件

解析里面的时间段,然后备份这个时间段内的文件

Linux下有特定的实现方式么?

在Windows下读取 *.ini 的配置文件有专门的类来做的

论坛徽章:
0
2 [报告]
发表于 2013-02-20 13:07 |只看该作者
怎么一个回复的都没有哦

我自己写了个函数  简单的实现了读取配置文件的功能

大家看看 有什么问题 和 需要改进的 地方么?
  1. #include <stdio.h>
  2. #include <string.h>

  3. /*******************************************************
  4. *  函数名称:ReadConfig
  5. *  参数列表:conf_path  配置文件路径
  6.                    conf_name  字段标识
  7.                    config_buff 数据空间
  8. *  返回值:  0 成功
  9.                -1 失败
  10. *  函数功能:从指定的配置文件中读取需要的字段
  11. *******************************************************/
  12. int ReadConfig(char

  13. *conf_path,char *conf_name,char *config_buff)
  14. {
  15.         char config_linebuf[256];
  16.        

  17. char line_name[40];
  18.         char exchange_buf[256];
  19.         char *config_sign = "=";
  20.        

  21. char *leave_line;
  22.         FILE *f;
  23.         f = fopen(conf_path,"r");
  24.         if(f == NULL)
  25.         {
  26.        

  27.         printf("OPEN CONFIG FALID\n");
  28.                 return -1;
  29.         }
  30.         fseek

  31. (f,0,SEEK_SET);
  32.         while(fgets(config_linebuf,256,f) != NULL)
  33.         {
  34.                 if

  35. (strlen(config_linebuf) < 3) //判断是否是空行
  36.                 {
  37. //                         printf("空

  38. 行 \n");
  39.                         continue;
  40.                 }
  41.                 if (config_linebuf

  42. [strlen(config_linebuf)-1] == 10) //去除最后一位是\n的情况
  43.                 {
  44. //                        

  45. printf("回车 \n");
  46.                         memset(exchange_buf,0,sizeof(exchange_buf));
  47.                

  48.         strncpy(exchange_buf,config_linebuf,strlen(config_linebuf)-1);
  49.                        

  50. memset(config_linebuf,0,sizeof(config_linebuf));
  51.                         strcpy

  52. (config_linebuf,exchange_buf);
  53.                 }
  54.                 memset(line_name,0,sizeof

  55. (line_name));
  56.                 leave_line = strstr(config_linebuf,config_sign);

  57.                 if

  58. (leave_line == NULL) //去除无"="的情况
  59.                 {
  60. //                         printf("没有等号

  61. \n");
  62.                         continue;
  63.                 }
  64.                 int leave_num = leave_line

  65. - config_linebuf;

  66.                 strncpy(line_name,config_linebuf,leave_num);
  67.                 if

  68. (strcmp(line_name,conf_name) ==0)
  69.                 {
  70.                         strncpy

  71. (config_buff,config_linebuf+(leave_num+1),strlen(config_linebuf)-leave_num-1);
  72.                        

  73. break;
  74.                 }
  75.                 if(fgetc(f)==EOF)
  76.                 {
  77.                        

  78. break;
  79.                 }
  80.                 fseek(f,-1,SEEK_CUR);
  81.                 memset

  82. (config_linebuf,0,sizeof(config_linebuf));
  83.         }
  84.         fclose(f);

  85.         return 0;
  86. }

  87. int

  88. main(int argv,char *argc[])
  89. {
  90.         int ret;
  91.         char conf_path[] = "gwis.conf";
  92.        

  93. char conf_start[] = "START";
  94.         char conf_end[] = "END";
  95.         char config_start

  96. [32],config_end[32];

  97.         memset(config_start,'\0',32);
  98.         memset(config_end,'\0',32);

  99.         if

  100. (access("host",0) != -1)
  101.         {
  102.                 printf("Find USB Media! \n");
  103.                 ret

  104. = ReadConfig(conf_path,conf_start,config_start);
  105.                 printf("起始日期 : %s

  106. \n",config_start);
  107.                 printf("ret = %d \n",ret);
  108.                 ret = ReadConfig

  109. (conf_path,conf_end,config_end);
  110.                 printf("结束日期 : %s \n",config_end);
  111.                

  112. printf("ret = %d \n",ret);
  113.         }

  114.         return 0;
  115. }
复制代码
配置文件:
START=20130216
END=20130220

下面是输出:
Find USB Media!
起始日期 : 20130216
ret = 0
结束日期 : 20130220
ret = 0

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2013-02-22 13:43 |只看该作者
回复 2# dolphin836


    建议到C语言版块
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP