免费注册 查看新帖 |

Chinaunix

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

[C] 用C语言读取配置文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-22 21:45 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2007-04-22 22:16 |只看该作者
可能有现成的库,我当初是想自己写个库的。
不过后来发现有xml的库的,你可以用xml来存你的配置

论坛徽章:
0
3 [报告]
发表于 2007-04-22 22:26 |只看该作者
把关键字用个枚举,然后就逐行读取配置文件进行分析就可以了。曾经做过一个类似的。主要是要注意异常分析

论坛徽章:
0
4 [报告]
发表于 2007-04-23 00:10 |只看该作者
看一下 PHP 源代码里面的实现不就知道了吗,有资源不利用,用Linux做什么。

论坛徽章:
0
5 [报告]
发表于 2007-04-23 08:14 |只看该作者
GLib 中提供了操作 .ini 的功能。可查看 GLib 文档 => GLib Utilities => Key-value file parser

论坛徽章:
0
6 [报告]
发表于 2007-04-23 08:41 |只看该作者
原帖由 w8 于 2007-4-22 21:45 发表
请问:如何用C语言实现读取下面的配置文件。

如:config.inf

[DOWNLOADNUMS]

updatetm=1813
downfile=11
killproc=0

[DOWNFILELIST]

downfile1=http://www1.cw988.cn/qq1.exe
downf ...


怎么感觉这玩意都象木马的配置文件

论坛徽章:
0
7 [报告]
发表于 2007-04-23 15:14 |只看该作者

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define MAXLINE     1024
  4. #define MAXDATA     200

  5. typedef struct down_load{
  6.     int     updatetm;
  7.     int     downfile;
  8.     int     killproc;
  9.     char    downfile1[MAXDATA];
  10.     char    downfile2[MAXDATA];
  11.     char    kill[MAXDATA];
  12. }DOWN;

  13. void usage(char *pro)
  14. {
  15.     printf("usage : %s <file>\n",pro);
  16.     exit(0);
  17. }

  18. void extract_data(char *line,char *temp)
  19. {
  20.     int     i = 0,j = 0;
  21.    
  22.     for ( ; line[i] != '=' ; i++ );
  23.     i++;
  24.     for ( ; i < strlen(line); i++ ) {
  25.         if ( line[i] == ' ' )
  26.             continue;
  27.         temp[j++] = line[i];
  28.     }
  29.     temp[j] = '\0';
  30. }
  31.         
  32. DOWN load_file(FILE *s_fp)
  33. {
  34.     DOWN    config;
  35.     char    line[MAXLINE],temp[MAXDATA];
  36.    
  37.     while ( fgets(line,MAXLINE,s_fp) != NULL ) {
  38.         if ( strstr(line,"updatetm") != NULL ) {
  39.             extract_data(line,temp);
  40.             config.updatetm = atoi(temp);
  41.         }
  42.         if ( strstr(line,"downfile") != NULL && strstr(line,"downfile1") == NULL && strstr(line,"downfile2") == NULL ) {
  43.             extract_data(line,temp);
  44.             config.downfile = atoi(temp);
  45.         }
  46.         if ( strstr(line,"killproc") != NULL ) {
  47.             extract_data(line,temp);
  48.             config.killproc = atoi(temp);
  49.         }
  50.         if ( strstr(line,"downfile1") != NULL ) {
  51.             extract_data(line,temp);
  52.             strcpy(config.downfile1,temp);
  53.         }
  54.         if ( strstr(line,"downfile2") != NULL ) {
  55.             extract_data(line,temp);
  56.             strcpy(config.downfile2,temp);
  57.         }
  58.         if ( strstr(line,"kill") != NULL ) {
  59.             extract_data(line,temp);
  60.             strcpy(config.kill,temp);
  61.         }
  62.     }
  63.    
  64.     return config;
  65. }

  66. void debug_config_print(DOWN config)
  67. {
  68.     printf("updatetm : %d\n",config.updatetm);
  69.     printf("downfile : %d\n",config.downfile);
  70.     printf("killproc : %d\n",config.killproc);
  71.     printf("downfile1: %s\n",config.downfile1);
  72.     printf("downfile2: %s\n",config.downfile2);
  73.     printf("kill     : %s\n",config.kill);
  74. }


  75. int main(int argc,char **argv)
  76. {
  77.     DOWN    configs;
  78.     FILE    *s_fp;
  79.    
  80.     if ( argc == 1 )    usage(argv[0]);

  81.     if ( (s_fp = fopen(argv[1],"r")) == NULL ) {
  82.         printf("[-] open %s failed.\n",argv[1]);
  83.         exit(0);
  84.     }
  85.    
  86.     configs = load_file(s_fp);
  87.     fclose(s_fp);
  88.    
  89.     debug_config_print(configs);
  90.     printf("\n[+] done.\n");
  91.    
  92.     return 0;
  93. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-04-23 17:32 |只看该作者
很常用的

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
9 [报告]
发表于 2007-04-23 19:39 |只看该作者
Windows里面有
GetPrivateProfileInt 读取整形配置变量
GetPrivateProfileString ...
WritePrivateProfileString 写...

论坛徽章:
0
10 [报告]
发表于 2007-04-24 06:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP