Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408370
  • 博文数量: 59
  • 博客积分: 5195
  • 博客等级: 大校
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-01 14:38
文章分类

全部博文(59)

文章存档

2017年(1)

2011年(10)

2010年(1)

2009年(9)

2008年(1)

2007年(35)

2006年(2)

我的朋友

分类: LINUX

2007-05-25 13:06:47

守护进程配置文件的创建及读取

由于守护进程的复杂化决定了它不能使用单一的代码实现方式,所以创建一个配置文件以便针对不同的需求来进行不同的设置,以达到守护进程的人性化、智能化。守护进程的配置文件通常都放在/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) |
给主人留下些什么吧!~~