守护进程配置文件的创建及读取
由于守护进程的复杂化决定了它不能使用单一的代码实现方式,所以创建一个配置文件以便针对不同的需求来进行不同的设置,以达到守护进程的人性化、智能化。守护进程的配置文件通常都放在/etc目录下,它的名字通常是name.conf,其中name是守护进程的名字。
配置文件模板:
#mysql用户名
mysql_user=study
#mysql用户名密码
mysql_password=123456
#主机地址
host=192.168.0.172
#连接mysql后打开的库名
database_name=hardware
#进行数据操作的表名
table_name=information
|
以下是我写的一个简陋的代码,供大家参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<syslog.h>
#define MAX_NUM 254
char s[MAX_NUM];
char key[10][MAX_NUM];
char value[10][MAX_NUM];
#define FILENAME "/etc/main.conf" //配置文件的路径及文件名
//消除一行中的所有空格
void trim(char p[MAX_NUM])
{
//原理是逐个字符的检查,只要不是空格就把这个字符重新赋给一个字符型数组,最后这个新的字符数组就得到了一行没有空格的字符串
int i,n=0;
for (i=0;i<MAX_NUM;i++)
{
if (p[i] != 32)
{
s[n] = p[i];
n++;
}
}
}
int main(void)
{
char r[MAX_NUM];
FILE *fp;
int i;
int row = 0;
int vol = 0;
int denghao = 0;
//打开配置文件并把文件描述符赋给fp
if ((fp=fopen(FILENAME,"r")) == NULL)
{
syslog(LOG_ERR,"can't open file %s\n",FILENAME);
exit(1);
}
//逐行读取配置文件,并把每行的键值和数据分离出来
while (fgets(r,MAX_NUM,fp))
{
trim(r); //先调用trim()函数把每行的空格去掉
//判断这一行是否为空行
if (strlen(s) < 2)
{
continue;
}
//判断这一行是否为注释行
if (s[0] == 35)
{
continue;
}
//逐个字符的读取和检测,以等号为分水线把键值和数据分离出来
for (i=0;i<strlen(s);i++)
{
//判断这个字符是否为等号
if (s[i] == 61)
{
i++; //这值为等号的这个字符隔过
denghao = 1;
}
//当denghao为0时把键值分离出来,为1时把数据分离出来
if (denghao)
{
value[row][vol] = s[i];
vol++;
}
else
{
key[row][i] = s[i];
}
}
row++;
vol = 0;
denghao = 0;
}
fclose(fp);
//打印键值和数据
for (i=0;i<row;i++)
{
printf("key:%s\n",key[i]);
//fgets()函数在读取一行数据时把回车符\n也读取了,所以要得到真正的数据要把这个回车符分割掉。strtok()函数以第二个参数为分割线把第一个参数分为两部分,只返回前半部分,并以\0结尾。
printf("value:%s\n",strtok(value[i],"\n"));
}
return 0;
}
|
阅读(1906) | 评论(0) | 转发(0) |