linux下配置文件的读写

整理自网络

来源:http://blog.csdn.net/oyd/article/details/5005735

读取一个文件,类似IP=192.168.1.8NETMASK=255.255.255.0格式的文件,并对文件进行解析,得到其key和value,可以读取相应key的value值,也可以得到配置相应的value;

typedef struct item_t {    char *key;    char *value;}ITEM;/* *去除字符串右端空格 */char *strtrimr(char *pstr){    int i;    i = strlen(pstr) - 1;    while (isspace(pstr[i]) && (i >= 0))        pstr[i--] = '\0';    return pstr;}/* *去除字符串左端空格 */char *strtriml(char *pstr){    int i = 0,j;    j = strlen(pstr) - 1;    while (isspace(pstr[i]) && (i <= j))        i++;    if (0<i)        strcpy(pstr, &pstr[i]);    return pstr;}/* *去除字符串两端空格 */char *strtrim(char *pstr){    char *p;    p = strtrimr(pstr);    return strtriml(p);}/* *从配置文件的一行读出key或value,返回item指针 *line--从配置文件读出的一行 */int  get_item_from_line(char *line, out ITEM *item){    char *p = strtrim(line);    int len = strlen(p);    if(len <= 0){        return 1;//空行    }    else if(p[0]=='#'){        return 2;    }else{        char *p2 = strchr(p, '=');        *p2++ = '\0';        item->key = (char *)malloc(strlen(p) + 1);        item->value = (char *)malloc(strlen(p2) + 1);        strcpy(item->key,p);        strcpy(item->value,p2);        }    return 0;//查询成功}int file_to_items(const char *file, out ITEM *items, out int *num){    char line[1024];    FILE *fp;    fp = fopen(file,"r");    if(fp == NULL)        return 1;    int i = 0;    while(fgets(line, 1023, fp)){            char *p = strtrim(line);        int len = strlen(p);        if(len <= 0){            continue;        }        else if(p[0]=='#'){            continue;        }else{            char *p2 = strchr(p, '=');            /*这里认为只有key没什么意义*/            if(p2 == NULL)                continue;            *p2++ = '\0';            items[i].key = (char *)malloc(strlen(p) + 1);            items[i].value = (char *)malloc(strlen(p2) + 1);            strcpy(items[i].key,p);            strcpy(items[i].value,p2);            i++;        }    }    (*num) = i;    fclose(fp);    return 0;}/* *读取value */int read_conf_value(const char *key,out char *value,const char *file){    char line[1024];    FILE *fp;    fp = fopen(file,"r");    if(fp == NULL)        return 1;//文件打开错误    while (fgets(line, 1023, fp)){        ITEM item;        get_item_from_line(line,&item);        if(!strcmp(item.key,key)){            strcpy(value,item.value);            fclose(fp);            free(item.key);            free(item.value);            break;        }    }    return 0;//成功}int write_conf_value(const char *key,char *value,const char *file){    ITEM items[20];// 假定配置项最多有20个    int num;//存储从文件读取的有效数目    file_to_items(file, items, &num);    int i=0;    //查找要修改的项    for(i=0;i<num;i++){        if(!strcmp(items[i].key, key)){            items[i].value = value;            break;        }    }    // 更新配置文件,应该有备份,下面的操作会将文件内容清除    FILE *fp;    fp = fopen(file, "w");    if(fp == NULL)        return 1;    i=0;    for(i=0;i<num;i++){        fprintf(fp,"%s=%s\n",items[i].key, items[i].value);        //printf("%s=%s\n",items[i].key, items[i].value);    }    fclose(fp);    //清除工作/*    i=0;    for(i=0;i<num;i++){        free(items[i].key);        free(items[i].value);    }*/    return 0;}

影子依旧可以相亲相爱。哪一块骨骼最温暖,总能一击即中。

linux下配置文件的读写

相关文章:

你感兴趣的文章:

标签云: