C语言实现的配置文件读取功能,喜欢的拿去用.

c语言读取xml配置文件 c语言读取xml配置文件 c语言要实现读取xml配置文件的功能。需要先编译libxml2库。 1、编译libxml2库 libxml2库从网络下载得到,这里下载的文件是:libxml2-sources-2.9.9.tar.gz 1.1、将libxml2文件拷贝到ubuntu系统下并解压 切换到libxml2库存在的路径下。 执行解压缩命令: tar -zxvf libxml2-sources-2.9.9.tar.gz 解压之后并切换到libxml2库路径下。 1.2、配置libxml2库 执行配置命 阅读详情

1. 首先声明, 代码主要是从Linux udev程序中提取出来的. 

2.  支持的配置文件格式如下:

 

#comment

var_name1 = "XXX"                  #comment

var_name2 = "QQQ"                #comment

 

3. config_file.h

 

#include <stdint.h>
#include <stdio.h>
#include <syslog.h>

#define    MAX_PATH_LEN         (512)
#define    MAX_FILE_NAME_LEN    (128)

 

/* 将配置文件中的配置项解析后存放到全局数组中 */

int parse_config_file(char *path_to_config_file);  

 

/* 从全局数组中读取一个个配置项。例如  get_config_var("var_name1");  */
char * get_config_var(char *var_name);  

4.  config_file.c

 

#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <ctype.h>

#include <syslog.h>
#include <fcntl.h>
#include <sys/resource.h>
#include <signal.h>

#include "config_file.h"

#define    MAX_VAR_NUM          (16)
#define    MAX_VAR_NAME_LEN     (128)
#define    MAX_VAR_VALUE_LEN    (MAX_PATH_LEN)


#define COMMENT_CHARACTER   '#'
#define LINE_SIZE    (768)

 

char ga_variables[MAX_VAR_NUM][MAX_VAR_NAME_LEN + 1];
char ga_values[MAX_VAR_NUM][MAX_VAR_VALUE_LEN + 1];
int  g_var_num = 0;

void get_dir_path_of_file(char *file, char *dir_path)
{
 char *temp;
    strncpy(dir_path, file, MAX_PATH_LEN);
    temp = strrchr(dir_path, '/');
    temp[0] = '\0';

}

void remove_trailing_chars(char *path, char c)
{
 size_t len;

 len = strlen(path);
 while (len > 0 && path[len-1] == c)
  path[--len] = '\0';
}

int get_key(char **line, char **key, char **value)
{
 char *linepos;
 char *temp;

 linepos = *line;
 if (!linepos)
    {  
  return -1;
    }

 /* skip whitespace */
 while (isspace(linepos[0]))
  linepos++;

 if (linepos[0] == '\0')
    {  
  return -1;
    }

 /* get the key */
 *key = linepos;
 while (1) {
  linepos++;
  if (linepos[0] == '\0')
        {
   return -1;
        }
  if (isspace(linepos[0]))
   break;
  if (linepos[0] == '=')
   break;
 }

 /* terminate key */
 linepos[0] = '\0';

 while (1) {
  linepos++;
  if (linepos[0] == '\0')
        {
   return -1;
        }
  if (isspace(linepos[0]))
   continue;
  if (linepos[0] == '=')
   continue;
        break;
 }


 /* get the value*/
 if (linepos[0] == '"')
    {  
  linepos++;
    }
 else
    {
  return -1;
    }
 *value = linepos;

 temp = strchr(linepos, '"');
 if (!temp)
    {
  return -1;
    }
   
 temp[0] = '\0';
 return 0;
}


int parse_config_file(char *path_to_config_file)
{
 char line[LINE_SIZE + 2];
 char *bufline;
 char *linepos;
 char *variable;
 char *value;
 char *buf;
 size_t bufsize;
 size_t cur;
 size_t count;
 int lineno;
 int retval = 0;

    FILE *cfg_file = fopen(path_to_config_file, "r");
 if (NULL == cfg_file)
    {
  ErrSysLog("can't open '%s' as config file: %s", path_to_config_file, strerror(errno));
  goto EXIT;
 }

 /* loop through the whole file */
 lineno = 0;
 cur = 0;
 while (NULL != fgets(line, sizeof(line), cfg_file))
    {
  lineno++;
  bufline = line;
  count = strlen(line);

  if (count > LINE_SIZE)
        {
   ErrSysLog("line too long, conf line skipped %s, line %d", path_to_config_file, lineno);
   continue;
  }

  /* eat the whitespace */
  while ((count > 0) && isspace(bufline[0]))
        {
   bufline++;
   count--;
  }
  if (count == 0)
   continue;

  /* see if this is a comment */
  if (bufline[0] == COMMENT_CHARACTER)
   continue;

  memcpy(line, bufline, count);
  line[count] = '\0';

  linepos = line;
  retval = get_key(&linepos, &variable, &value);
  if (retval != 0)
        {
   ErrSysLog("error parsing %s, line %d:%d", path_to_config_file, lineno, (int)(linepos-line));
   continue;
  }

        if (g_var_num >= MAX_VAR_NUM)
        {
   ErrSysLog("too many vars in  %s, line %d:%d", path_to_config_file, lineno, (int)(linepos-line));
   continue;
  }

        if (strlen(variable) > MAX_VAR_NAME_LEN)
        {
   ErrSysLog("var name to long %s, line %d:%d", path_to_config_file, lineno, (int)(linepos-line));
   continue;
  }

        if (strlen(value) > MAX_VAR_VALUE_LEN)
        {
   ErrSysLog("value to long %s, line %d:%d", path_to_config_file, lineno, (int)(linepos-line));
   continue;
  }

  strncpy(ga_variables[g_var_num], variable, sizeof(ga_variables[g_var_num]));
        remove_trailing_chars(value, '/');
  strncpy(ga_values[g_var_num], value, sizeof(ga_values[g_var_num]));
        g_var_num++;
        continue;

 }
EXIT:
 fclose(cfg_file);
 return g_var_num;
}

char * get_config_var(char *var_name)
{
    int i;
 for(i = 0; i < g_var_num; i++)
    {
  if (strcasecmp(ga_variables[i], var_name) == 0)
        {
   return ga_values[i];
  }

    }
    ErrSysLog("get %s failed", var_name);
 return NULL;
   
}

void print_all_vars()
{
    int i;
    ErrPrintf("g_var_num == %d", g_var_num);
 for(i = 0; i < g_var_num; i++)
    {
        printf("%s = %s\n", ga_variables[i], ga_values[i]);

    }
   
   
}

 

 

 

Linux C语言实现读取ini配置文件 网上收集的代码,亲测可用,代码如下: /* * config.h - declarations/definitions for reading configuration files * * Gang He - dchg2000@mail.com . */ #ifndef _HEGANG_CONFIG_H_ #define _HEGANG_CONFIG_H_ 阅读详情

相关推荐

C语言读取写入 ini 配置文件

文章目录一、了解什么是INI文件?二、INI文件的格式三、解析上述文件四、测试如下 一、了解什么是INI文件? ini 文件是Initialization File的缩写,即初始化文件,这是用来配置应用软件以实现不同用户的要求。 二、INI文件的格式 INI文件由节、键、值组成。 一个简单的的INI文件例子如下: [Setting] INIT_FLAG=0; VOLUME=1; LANGUAGE=1; 如上例子,[Setting]就是节,=号左边的值是键,=号右边的是值。 三、解析上述文件 /*ini.h

“逛丢一只鞋”的博客 9054

C 语言读取配置文件

(1) 准备好配置文件,在源码的路径下,叫config.ini,里面的内容是 [IPSite] socketOneIp=127.0.0.1 socketOnePort=6001 socketTwoIp=127.0.0.1 socketTwoPort=6002 [Timer] #单位 毫秒 timeCommand=5000 timePara=4000 (2) 定义函数 const int MAX_KEY_NUM = 128; const int MAX_KEY_LENGTH = 1024; char

qq_14874791的博客 1万+

C语言读取类unix风格配置文件

/*************************************************** * * C语言读取配置文件 * 陈志中 2010-1-17 * che

yorloo的专栏 2745

(C)从文件中读取配置项值

配置文件内容: [cfg] ip=192.168.10.1 port=5890 方式一:纯粹的读匹配 static void test_get_cfg_value(char *file_path) { char ip[110] = { 0 }; char port[110] = { 0 }; int len = 0; int i = 0; int j = 0; char line[1024] = { 0 }; FILE *fp = fopen(file_path, "r");.

时间流浪者 542

头歌操作系统2023春季课堂练习2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。

weixin_64821608的博客 8129

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

c语言——配置文件读写

目录c语言——配置文件读写代码头文件主文件工具类判断当前行是否有效获得文件有效行数加载配置文件解析配置文件获得指定配置信息释放配置文件信息总的代码 c语言——配置文件读写 配置文件读写 文件的读取与关闭 在c++中调用c语言函数 二级指针作函数参数 三级指针作函数参数 二级指针赋值给三级指针 结构体二级指针 代码 头文件 ConfigFile.h #define _CRT_SECURE_NO_WARNINGS //防止头文件重复包含 #pragma once #include<stdio.h&g

mirana的专栏 7779

2025东三省D题深圳杯数学建模实战解析:基于多模型融合的法医STR混合样本智能识别系统

本文深入解析了2025年东三省数学建模竞赛D题,即深圳杯赛题,聚焦于法医STR混合样本的智能识别挑战。文章系统阐述了构建一个基于多模型融合的智能识别系统的完整流程,涵盖贡献者人数判定、DNA贡献比例估计、个体基因型推断以及STR谱图去噪四大核心步骤。通过融合高斯混合模型、随机森林、非负矩阵分解、小波变换与深度学习等多种技术,并强调特征工程的重要性,为破解法医DNA混合样本分析这一行业难题提供了清晰的数学建模与AI实战思路。

weixin_29050271的博客 392

c程序解析ini配置文件

c程序解析ini配置文件 很多程序都有配置文件,配置文件有很多种类型,以下实现ini配置文件中的参数读取功能。 1、ini配置文件 配置文件名称为test.ini,内容如下: [bmpinfo] width=1920 height=1080 bit=3 blue=0 green=0 red=255 [bmpinfo_end] 2、c程序代码 主要函数是get_string_from_ini和GetIniKeyString两个。功能是获取ini配置文件中的字符串。如果是整形的配置文件,可以通过atoi转换。

jack8126的博客 2763

行人重识别(ReID)基础知识入门

行人重识别(Person re-identification)主要目的是针对出现在监控摄像头内的某个目标行人,准确快速地从监控网络其他摄像头内的大量行人中将这个目标行人标识出来。如图所示一个区域有多个摄像头拍摄视频序列,ReID的要求对一个摄像头下感兴趣的行人,检索到该行人在其他摄像头下出现的所有图片。

用于记录 1万+

SQLSTATE58030

在优化一条SQL的时候遇到了执行错误 gtlions =# select t1.telnumber,t2.ua,t2.url,t1.apply_name,t2.apply_name from tb1 t1 gtlions -# left outer join tb2 t2 on t1.sid = t2.ipsid gtlions-# where t1.sum_date=20141128 a

Gtlions Tracker 3660

C语言读取配置文件的内容

#include <stdio.h> #include <stdlib.h> #include <string.h> #define path "C:/Users/ZS/Desktop/test.ini" //去除字符串的左右两端的空格 char *s_trim(char *str); //实现读取配置文件的一行,当行的开头为#时则跳过这行 void readline(char *buf, int size, FILE *fp); /* file 配置文件路.

如山石的系统虚拟化之路 2853

信创那些事儿——Spring Boot中集成东方通中间件(TongWeb)

在Spring Boot中集成东方通中间件(如TongWeb作为Servlet容器)通常涉及几个步骤,但需要注意的是,TongWeb本身是一个独立的Java EE应用服务器,而不是像Tomcat那样可以直接嵌入到Spring Boot应用中的中间件。因此,集成通常意味着将Spring Boot应用打包为WAR文件并部署到TongWeb服务器上。

来北欧写代码 6493

c语言编程配置文件干嘛用的,C语言实现的配置文件读取功能,喜欢的拿去用.

1.首先声明, 代码主要是从Linux udev程序中提取出来的.2. 支持的配置文件格式如下:#commentvar_name1 = "XXX" #commentvar_name2 = "QQQ" #comment3. config_file.h#include #include #include #define MAX_...

weixin_36087877的博客 433

Java Swing之多文档界面设计-JDesktopPane、JInternalFrame类简单应用示例

Java MDI多文档界面是一种用户界面风格,允许在一个主窗口中包含多个子窗口(文档窗口),每个子窗口可以显示不同的内容或功能模块,从而可以满足用户打开不同窗口完成不同功能的需求。开发多文档程序,一般需要JDesktopPane(桌面面板类)和JInternalFrame(内部窗体类)两个类。以下简单介绍,最后通过一个实例介绍实现逻辑。

编程语言教学工作者的博客 2209

[HBM] RAM Cell Self Repair | 内存单元自我修复

对抗错误的大都是冗余,内存颗粒在设计的时候也考虑增加冗余。具体的说:添加冗余或备用的存储单元行和列,及时将测试中的故障进行修复和替换,存储器修复包括行修复,列修复或两者的组合。

串起点滴 785

c语言读取json配置文件

c语言读取json配置文件 c语言要读取json文件,一般使用cJSON库,所以首先要下载json库。 下载后得到cJSONFiles.zip,将该文件拷贝到ubuntu虚拟机下,解压后观察文件,主要有cJSON.c 和cJSON.h,还有一个test.c测试文件。 参考test.c测试代码,实现testReadJson.c,主要功能是读取test.json配置文件,并将配置文件中的参数读取识别出来。 主要通过cJSON_Parse解析出cJSON文件,再使用cJSON_GetObjectItem函数解析j

jack8126的博客 4231

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言实现配置文件的简单读取,易懂

自己也是菜鸟一枚,就简单写了一个,供以后使用,如有不足,请指点。。。 以下为获取部分: 测试: 配置文件: 结果:

weixin_44105987的博客 3623

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言实现读取ini文件简单程序,C语言实现的配置文件读取功能

1. 首先声明, 代码主要是从Linux udev程序中提取出来的。2. 支持的配置文件格式如下:#commentvar_name1 = "XXX" #commentvar_name2 = "QQQ" #comment3. config_file.h#include #include #include#define MAX_PATH_LEN (512)#define MAX_FILE_NAME_L...

weixin_35215870的博客 979

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言实现读写ini配置文件代码示例

/******************main.c*******************/ #define _CRT_SECIRE_NO_WARNINGS #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include"CfgFile.h" void menu() {     print...

Shayne_Li的专栏 3701

c语言实现配置文件的读写

配置文件的格式如下: key1 = value1 key2 = value2   .   .   . 名值对以一个=链接,一条记录以换行符分割 头文件: #include #include #include string.h> 函数原型: void trim(char *strIn, char *strOut);//去除字符串首位

sinat_35297665的博客 1万+

用C语言读取配置文件

用C语言读取配置文件 /*** readcfg.c ***/ #include #include #include #include #include #define KEYVALLEN 100 /* 删除左边的空格 */ static char * l_trim(char * szOutput, const char *szInput) { assert(szInput

iw1210的专栏 2009

C语言读取配置文件的另类写法

前些天写了一篇《标准输出的重定向》,这几天又遇到了读取配置文件的任务,想一改原来的" FILE* fp ……"之类的写法,换用一种新的灵活性更高的方式,即把标准输出重定向到一个管道的写端,再从管道的读端获取内容。     首先我们有这样一个函数,用来获取system调用的输出: static int getResultFromSystemCall(const char* pCmd, cha

黄沙百战穿金甲,不破楼兰终不还。 1418

C语言读取ini配置文件

在这个代码中,我们首先使用 iniparser_load 函数一次性地加载整个INI文件,并将其保存在 dictionary 类型的结构体中。最后,我们使用 iniparser_freedict 函数释放加载的INI文件所占用的内存。如果你想一次性地读取INI文件并将其保存在内存中,我会推荐你使用 iniparser 库。它是一个用纯C写的库,可以解析INI文件,而且它的设计方式是一次性地读取整个INI文件到内存中,方便后续的值读取。但这是一个常见的任务,所以有许多可供选择的库。

C or CPP 1322

用C语言配置文件读取程序,读取配置文件[方式一]之纯C语言实现

我们在程序编写中往往会遇到这样的情况,程序运行中我们会读取配置文件,从中读取我们程序需要的各种参数与配置信息,我一般采用读取配置文件和使用Berkeley db的方式,这两种方式的移植性都较好,当然前者更好,但是后者也有它的好处,它可以很好的处理配置信息的读取等等,但是它需要bdb库的支持,虽然库很小,但对我们来讲,还是麻烦,所以我们一般还是采用读取配置文件的方式,而读取配置文件的方式又有很多种,...

weixin_29775479的博客 650
上一篇: 高性能程序设计(性能优化参考点)
下一篇: 七条原则实现简单的代码设计
无忧老猪
博客等级 码龄18年 200粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值