C解析ini文件

 1、文件内容

;
; G-Net Update inifile
;

[GENERAL]
Version = 1.0;
LogLevel = 1;

[DATABASE]
MySqlBranchServerAddr = 127.0.0.1
MySqlServerPort = 3306
MySqlDbName = gshare
MySqlUserName = gsh107
MySqlPassword = my223gs4mk221
 

2、数据结构

typedef struct _CONIFG_INFO
{
	char 				version[32];
	char 				log_level;
	char 				mysql_branch_server_addr[PATH_BUFF_SIZE];
	unsigned int 		mysql_server_port;
	char 				mysql_db_name[DB_NAME_SIZE];
	char 				mysql_user_name[DB_USER_NAME_SIZE];
	char 				mysql_password[DB_PASSWORD_NAME_SIZE];
}CONFIG_INFO;	//Should correspond with structure CONFIG_INFO_KEY_WORD_ID and CONFIG_INFO.

3、数据结构初始化

static char *config_file_key_word[MAX_NO_OF_CONFIG_KEY_WORD] =
{
        "Version",
        "LogLevel",
        "MySqlBranchServerAddr",
        "MySqlServerPort",
        "MySqlDbName",
        "MySqlUserName",
        "MySqlPassword",
};

 4、读取数据到buf中

int read_file_to_buff(char *file_path, unsigned long len, char *data)
{
	int ret = -1;
	FILE *fp = NULL;
	int count = -1;

	if ((fp = fopen(file_path, "r")) == NULL)
	{
		char log_str_buf[LOG_STR_BUF_LEN];
		snprintf(log_str_buf, LOG_STR_BUF_LEN, "[%s %s %d] Can't open %s.\n", __FILE__, __FUNCTION__, __LINE__, file_path);
		log_string(LOG_LEVEL_ERROR, log_str_buf);
		return -1;
	}

	if ((count = fread(data, 1, len, fp)) > 0)
	{
		ret = 0;
	}

	if (fp != NULL)
	{
		fclose(fp);
	}

	return ret;
}

5、解析关键字

static BOOL parse_config_key_word(char *data, char *key_word)
{
	char *p;
	int i;
	BOOL ret = FALSE;

	p = data;
	if (strchr(p, ';') != NULL || strchr(p, '\n') != NULL)
	{
		i = 0;
		while (i < CONFIG_KEY_WORD_BUF_SIZE && p[i] != ';' && p[i] != '\n')
		{
			key_word[i] = p[i];
			i++;
		}
		key_word[MIN(i, CONFIG_KEY_WORD_BUF_SIZE-1)] = '\0';
		ret = TRUE;
	}

	return ret;
}

6、 解析数据到结构体中

 

int read_config_info(CONFIG_INFO *config_info)
{
	char *config_file_buff = NULL;
	char *p = NULL;
	int index = 0;
	int ret = -1;
	char key_word_buf[CONFIG_KEY_WORD_BUF_SIZE] = "";

	config_file_buff = malloc(INI_FILE_BUF_SIZE);
	if (config_file_buff == NULL)
	{
		printf("[%s %s %d] No enough memory!\n", __FILE__, __FUNCTION__, __LINE__);
		return -1;
	}
	bzero(config_file_buff, INI_FILE_BUF_SIZE);

	if (read_file_to_buff(SERVER_INI_FILE, INI_FILE_BUF_SIZE - 1, config_file_buff) != 0)
	{
		goto EXIT;
	}

	bzero(config_info, sizeof(CONFIG_INFO));
	for (index = 0; index < MAX_NO_OF_CONFIG_KEY_WORD; index++)
	{
		p = strstr(config_file_buff, config_file_key_word[index]);
		if (p == NULL)
		{
			goto EXIT;
		}

		p = strchr(p, '=');
		if (p == NULL)
		{
			goto EXIT;
		}
		p++;

		/* tab or space */
		while (p[0] == 9 || p[0] == 32)
			p++;

		if (!parse_config_key_word(p, key_word_buf))
		{
			continue;
		}

		switch (index)
		{
			case CON_VERSION:
				snprintf(config_info->version, sizeof(config_info->version), "%s", key_word_buf);
				break;
			case CON_LOG_LEVEL:
				config_info->log_level = atoi(key_word_buf);
				break;
			case CON_MYSQL_BRANCH_SERVER_ADDR:
				snprintf(config_info->mysql_branch_server_addr, MIN(PATH_BUFF_SIZE, CONFIG_KEY_WORD_BUF_SIZE), "%s", key_word_buf);
				break;
			case CON_MYSQL_SERVER_PORT:
				config_info->mysql_server_port = atol(key_word_buf);
				break;
			case CON_MYSQL_DB_NAME:
				snprintf(config_info->mysql_db_name, MIN(sizeof(config_info->mysql_db_name), CONFIG_KEY_WORD_BUF_SIZE), "%s", key_word_buf);
				break;
			case CON_MYSQL_USER_NAME:
				snprintf(config_info->mysql_user_name, MIN(sizeof(config_info->mysql_user_name), CONFIG_KEY_WORD_BUF_SIZE), "%s", key_word_buf);
				break;
			case CON_MYSQL_PASSWORD:
				snprintf(config_info->mysql_password, MIN(sizeof(config_info->mysql_password), CONFIG_KEY_WORD_BUF_SIZE), "%s", key_word_buf);
				break;
		}
	}
	ret = 0;

EXIT:
	free(config_file_buff);
	return ret;
}

7、显示数据

void print_config_info(CONFIG_INFO config_info)
{
	printf("[%s %s %d] config_info.version: %s\n", __FILE__, __FUNCTION__, __LINE__, config_info.version);
	printf("[%s %s %d] config_info.LogLevel: %d\n", __FILE__, __FUNCTION__, __LINE__, config_info.log_level);
	printf("[%s %s %d] config_info.mysql_branch_server_addr: %s\n", __FILE__, __FUNCTION__, __LINE__, config_info.mysql_branch_server_addr);
	printf("[%s %s %d] config_info.mysql_server_port: %d\n", __FILE__, __FUNCTION__, __LINE__, config_info.mysql_server_port);
	printf("[%s %s %d] config_info.mysql_db_name: %s\n", __FILE__, __FUNCTION__, __LINE__, config_info.mysql_db_name);
	printf("[%s %s %d] config_info.mysql_user_name: %s\n", __FILE__, __FUNCTION__, __LINE__, config_info.mysql_user_name);
	printf("[%s %s %d] config_info.mysql_password: %s\n", __FILE__, __FUNCTION__, __LINE__, config_info.mysql_password);
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值