c 读取配置文件

因为功能貌似有点常用,所以就发一个上来

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

// 配置结构体
struct configItem
{
	char key[20];
	char value[50];
}  configList[] =	{
	{"ip", 0},
	{"port", 0},
	{"max_count", 0},
	{"max_ip_count", 0},
	{"limit_speed", 0}
};

/*
 * 字符串中寻找以等号分开的键值对
 * @param  src	源字符串 [输入参数]
 * @param  key	   键    [输出参数]
 * @param value	   值    [输出参数]
 */
int strkv(char *src, char *key, char *value)
{
	char *p,*q;
	int len;

	if(*src == '#') return 0; // # 号开头为注视,直接忽略

	p = strchr(src, '=');	// p找到等号
	q = strchr(src, 'n');	// q找到换行

	// 如果有等号有换行
	if (p != NULL && q != NULL)
	{
		*q = '\0'; // 将换行设置为字符串结尾
		strncpy(key, src, p - src); // 将等号前的内容拷贝到 key 中
		strcpy(value, p+1);	// 将等号后的内容拷贝到 value 中
		return 1;
	}else
	{
		return 0;
	}
}

/*
 * 配置函数
 * @param configFilePath 配置文件路径 [输入参数]
 * @param   configVar	 存储配置的值 [输出参数]
 * @param   configNum	 需配置的个数 [输入参数]
 */
void config(char *configFilePath, struct configItem * configVar, int configNum)
{
	int i;
	FILE *fd;
	char buf[50]="";	// 缓冲字符串
	char key[50]="";	// 配置变量名
	char value[50]="";	// 配置变量值	

	// 打开配置文件
	fd = fopen(configFilePath, "r");

	if (fd == NULL)
	{
		printf("配置文件打开失败!n");
		system("pause");
		exit(-1);
	}

	// 依次读取文件的每一行
	while(fgets(buf, 50, fd))
	{
		// 读取键值对
		if (strkv(buf, key, value))
		{
			// 读取成功则循环与配置数组比较
			for(i = 0; i< configNum; i++)
			{
				// 名称相等则拷贝
				if (strcmp(key, configVar[i].key) == 0)
				{				
					strcpy(configVar[i].value, value);
				}				
			}
			// 清空 读取出来的 key
			memset(key, 0, strlen(key));
		}
	}

	fclose(fd);
}

int main()
{
	int i;
	
	config(
		"F:\config.txt",	// 配置文件路径
		configList,			// 配置变量数组
		sizeof(configList)/sizeof(struct configItem) // 数组大小
	);

	// 循环打印获取到的值
	for(i=0; i<sizeof(configList)/sizeof(struct configItem); i++)
	{
		printf("%s = %s n", configList[i].key, configList[i].value);
	}

	system("pause");

	return 0;
}

配置文件内容

#############################
#       lsftpd置文件        #
#############################

#服务端ip
ip=192.168.1.128
#服务端口
port=4567
#最大连接数
max_count=5
#单ip最大连接数
max_ip_count=2
#限速
limit_speed=5

读取效果:

ip = 192.168.1.128
port = 4567
max_count = 5
max_ip_count = 2
limit_speed = 5
Press any key to continue . . .

还可以添加一个属性,用作类型标识。拷贝值的时候直接 switch 这个标识对 value 进行强转。

Advertisements

One thought on “c 读取配置文件

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s