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);
}