linux下c语言简单实现获取配置文件中的配置项(代码片段)

Hero_HL Hero_HL     2022-12-25     573

关键词:

使用好处:有些参数不用写死,也不用在编译时添加。免得每次修改参数修改代码或重新编译,直接使用配置文件即可。
类比windows下GetPrivateProfileString、GetPrivateProfileInt获取配置的API

1. 使用vs2019创建linux项目

1.1 测试的配置文件如下图

1.2 测试代码和结果如下图

2. 核心代码

2.1 ini.h

#ifndef __INI_H__
#define __INI_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

#define BUF_SIZE 1024

int GetIniChar(char* section, char* key, char* buf, char* filename);
int GetIniInt(char* section, char* key, int defeat, char* filename);

#endif

2.2 ini.c

#include "ini.h"

// 获取char类型配置项
int GetIniChar(char* section, char* key, char* buf, char* filename)

	if (buf == NULL)
	
		printf("buf is null\\n");
		return -1;
	
	memset(buf, 0, sizeof(buf));		// 清零

	if (section == NULL || key == NULL || filename == NULL)
	
		printf("param is null\\n");
		return -2;
	
	char cSection[BUF_SIZE] =  0 ;			// 存放配置文件每行去除空格和注释的section
	sprintf(cSection, "[%s]", section);

	FILE* fp = NULL;							// 配置文件描述符
	if (NULL == (fp = fopen(filename, "r")))
	
		printf("fopen err:%d [%s]\\n", errno, strerror(errno));
		return -3;
	
	
	char cBufFileLine[BUF_SIZE] =  0 ;		// 存放配置文件每行的实际数据
	int flag = 0;								// section标记
	while (NULL != fgets(cBufFileLine, BUF_SIZE, fp))
	
		int i, j;									// 循环计数器
		
		// 去注释,去空格,去换行符
		char cBufLine[BUF_SIZE] =  0 ;			// 存放配置文件每行去除空格和注释的数据
		for (i = 0, j = 0; i < strlen(cBufFileLine); i++)
		
			if (cBufFileLine[i] != ' ' && cBufFileLine[i] != '\\t')
			
				if (cBufFileLine[i] == ';' || cBufFileLine[i] == '\\n')
				
					cBufLine[j] = '\\0';
					break;
				
				cBufLine[j++] = cBufFileLine[i];
			
		

		char* cTmpString = NULL;					// 存放cBufLine中第一次出现字符=的位置及之后的字符串,用于提取value
		cTmpString = strchr(cBufLine, '=');	// 返回cBufFileLine中第一次出现字符=的位置,失败返回null
		if (cTmpString && flag)
		
			// 获取key
			char cKey[BUF_SIZE] =  0 ;				// 存放配置文件每行去除空格和注释的key
			for (i = 0; i < strlen(cBufLine); i++)
			
				cKey[i] = cBufLine[i];
				if (cBufLine[i] == '=')
				
					cKey[i] = '\\0';
					break;
				
			
			
			if (0 == strncmp(key, cKey, strlen(key)))
			
				// 获取value
				char cValue[BUF_SIZE] =  0 ;				// 存放配置文件每行去除空格和注释的value
				for (i = 1; i < strlen(cTmpString); i++)
				
					cValue[i - 1] = cTmpString[i];
				
				
				fclose(fp);
				strcpy(buf, cValue);
				return 0;		// 成功
			
		
		else
		
			if (flag && strchr(cBufLine, '[') && strchr(cBufLine, ']'))
			
				fclose(fp);
				return  -4;		// 该section已经搜索完毕
			
			if (0 == strncmp(cSection, cBufLine, strlen(cSection)))
			
				flag = 1;
			
		

	
	fclose(fp);
	return -5;	// 未找到配置项


// 获取int类型配置项
int GetIniInt(char* section, char* key, int defeat, char* filename)

	char cBuf[BUF_SIZE] =  0 ;
	if (0 == GetIniChar(section, key, cBuf, filename))
	
		return atoi(cBuf);
	
	return defeat;

linux修改jar包中的springboot配置文件

...jar包。麻烦又耗时,特别是当jar包比较大的情况下。  简单点的做法就是直接修改jar包:[prize@centos~]$vimprize-0.0.1-SNAP 查看详情

linux下一个简单的日志系统的设计及其c代码实现(代码片段)

...件开发工程师的基本要求。本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现。本文为相关开发项目Linux下软件日志系统的编写提供了有益的参考。2.日志系统的框架结构一个完整的日志系统包括... 查看详情

怎么使用c语言读取properties配置文件

参考技术A用C语言读取properties配置文件的方法:1、找到配置路径下的properties文件2、按行读取文件内容具体实现代码如下://定义读入的行数组,1024行charline[1024];//存放配置项数组settingintsetting[N],i=0;//开始循环读入while(fgets(fp,line... 查看详情

linux下c语言简单实现写日志函数(多线程安全)(代码片段)

调用时包含log.h文件后使用LOG函数进行写入日志操作//eg:LOG("[%s][%d]a:%db:%s",__FILE__,__LINE,a,b);log.h//log.h:标准系统包含文件的包含文件//或项目特定的包含文件。#pragmaonce#include<stdio.h>#include<sys/types.h>#include 查看详情

springbootspringboot中自定义配置项(代码片段)

...4;value在实际项目中,经常需要在配置文件中定义一些简单的配置项,SpringBoot提供@Value注解来设置简单的配置项,默认读取application.properties文件中的配置属性。我们在application.properties配置文件下自定义配置属性。... 查看详情

在java代码中获取spring配置文件中的配置项

1. application.properties配置文件增加配置项myconfig.item.url=http://127.0.0.1:8080/proj/test 2.写一个常量类importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Comp 查看详情

易语言怎样读取配置文件

...lo这个配置文件怎么读取啊?方法如下:  1、打开“易语言主程序”,进入“新建易语言工程文件”对话框,果断选择第一个“Windows窗口程序”然后点击“确定”按钮,进入易语言窗口程序设计界面。  2、下面,就是窗口... 查看详情

标准c语言,修改配置文件

编写一个修改配置文件的函数,调用此函数后能完成如下操作:1、修改配置文件字段值。2、添加新字段。3、忽略#号注释项。如配置文件config.ini内容如下:[ccddt]ver=1.0.2#status=1status=2[system]ver=2.7.2root=/home/linux调用函数后,将配置文... 查看详情

springboot设置全局上传文件路径并上传文件(代码片段)

...操作。配置全局上传路径配置全局上传路径,其实很简单,需要借助一个配置项:我没有云服务器,这里以自己的电脑的某个文件夹为例#文件上传路径file.uploadFolder=D:/upload/其实就是这里:读取配置配置完... 查看详情

linuxc配置串口

...置奇偶校验位可以通过修改termios结构体中的c_cflag成员来实现,若无校验,则将PARENB位设为0;若有校验,则PARENB为1。之后再根据PARODD来区分奇偶校验,PARODD为1表示奇校验,PARODD为0表示偶校验。例如设置无奇偶校验位:设置数据... 查看详情

linux下使用protobuf实现简单配置功能

http://blog.csdn.net/flyan338/article/details/8448518前言:   程序一般需要load一些参数列表,一般来说我们可以通过linux自带的命令行解析函数来搞定(getopt_long,如果需要了解的man一下,manpage里面是有example的),但是对... 查看详情

linux中如何查看文件的行数,字数,字节数

...这些关键数据呢。在Linux系统中这统计非常方便,只需要简单的几个命令就可以搞定,这个命令就是wc。首先我们介绍下wc这个命令:帮助说明中简介明白的介绍了wc的用法,我们来举例说明下:1、获取文件中行数2、获取文件中单... 查看详情

标准 C 语言中最简单的 SQL 实现,用于基于 linux 的 ARM 终端

】标准C语言中最简单的SQL实现,用于基于linux的ARM终端【英文标题】:mostsimpleSQLimplementationinstandardCtobeusedinlinux-basedARMterminals【发布时间】:2011-10-2808:14:48【问题描述】:你知道一些开源的非常小的SQL服务器实现可能在1个*.c(或... 查看详情

linux下c语言实现多线程文件复制(代码片段)

转自:https://www.cnblogs.com/zxl0715/articles/5365989.html1、具体思路把一个文件分成N份,分别用N个线程copy,每个线程只读取指定长度字节大小的内容最后一个线程的源文件所指定的结束位置是文件的实际大小每个线程读取指定源文件部... 查看详情

zookeeper安装和使用windows

...bsp;http://hadoop.apache.org/zookeeper/来获取,Zookeeper的安装非常简单,下面将从单机模式和集群模式两个方面介绍Zookeeper的Windows安装和配置.首先需要安装JdK,从Oracle的Java网站下载,安装很简单,就不再详述。单机模式单机安装非常简... 查看详情

怎么使用c语言读取properties配置文件

用C语言读取properties配置文件的方法:1、找到配置路径下的properties文件2、按行读取文件内容具体实现代码如下://定义读入的行数组,1024行charline[1024];//存放配置项数组settingintsetting[N],i=0;//开始循环读入while(fgets(fp,line,1024)!=NULL)... 查看详情

javascript怎样获取配置文件中的参数

...哪是通过js获取的啊,只不过是嵌入了一个服务器端脚本语言得到的。 查看详情

springboot项目优雅的实现多配置文件切换以及获取配置信息(代码片段)

...具类进行解析yml获取对应的配置数据创建工具类对yml进行简单的解析publicclassYmlToolsprivateHashMap<String,String>ps=newLinkedHashMap<>();publicYmlTools()publicYmlTools(Resourceresource)load(resource);publicYmlTools(Stringpath)load(path);publicYmlToolsload(Str... 查看详情