您的位置:首页 > 运维架构 > Linux

centos下c代码 更改配置文件中配置项的数值

2016-01-19 17:05 513 查看
在centos环境下,因需要不断更新配置文件中配置项的赋值,所以使用c编写了代码,网络上的代码要么多少有些错误,要么不太适用,下面的代码是在centos6.4下编译通过的

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

#include <errno.h>

#define KEYVALLEN 100

//删除左边空格

char * l_trim(char * szOutput,const char *szInput)

{

assert(szInput !=NULL);

assert(szOutput !=NULL);

assert(szOutput !=szInput);

for (NULL; *szInput !='\0' && isspace(*szInput); ++szInput)

{

;

}

return strcpy(szOutput,szInput);

}

//删除右边的空格

char * r_trim(char *szOutput,const char *szInput)

{

char *p=NULL;

assert(szInput !=NULL);

assert(szOutput !=NULL);

assert(szOutput !=szInput);

strcpy(szOutput,szInput);

for(p=szOutput+strlen(szOutput)-1;p >=szOutput && isspace(*p);--p)

{

;

}

*(++p)='\0';

return szOutput;

}

//删除两边的空格

char * a_trim(char *szOutput,const char * szInput)

{

char *p=NULL;

assert(szInput !=NULL);

assert(szOutput !=NULL);

l_trim(szOutput,szInput);

for(p=szOutput+strlen(szOutput)-1;p>=szOutput && isspace(*p);--p)

{

;

}

*(++p)='\0';

return szOutput;

}

//修改配置文件,当配置文件存在标记字段,修改其赋值,不存在则提示

//参数1配置文件 参数2需要匹配的标记 参数3要替换的字符

int main(int argc,char *argv[])

{

//判断参数个数

if(argc !=4 )

{

printf("./configfile_wr_parameter configfile itemname itemvalue \n");

return 0;

}

char *conf_path;

conf_path=argv[1];

char *conf_name;

conf_name=argv[2];

char *config_buff=malloc(sizeof(char)*256);

config_buff=argv[3];

char buf_i[KEYVALLEN],buf_o[KEYVALLEN];

char config_linebuf[256];

char line_name[40];

char *config_sign="=";

char *leave_line;

int alter_sign=0;

FILE *f;

f=fopen(conf_path,"r+");

if(f==NULL)

{

printf("OPEN CONFIG FAILED\n");

return 0;

}

fseek(f,0,SEEK_END);

long congig_lenth=ftell(f);

int configbuf_lenth=strlen(config_buff);

configbuf_lenth=configbuf_lenth+5;

char sum_buf[congig_lenth+configbuf_lenth];

memset(sum_buf,0,sizeof(sum_buf));

fseek(f,0,SEEK_SET);

while(fgets(config_linebuf,256,f)!=NULL)

{

if(strlen(config_linebuf)<3)//判断是否是空行

{

strcat(sum_buf,config_linebuf);

continue;

}

leave_line=NULL;

leave_line=strstr(config_linebuf,config_sign);

if(leave_line == NULL)//去除无“=”的情况

{

strcat(sum_buf,config_linebuf);

continue;

}

int leave_num=leave_line-config_linebuf;

memset(line_name,0,sizeof(line_name));

strncpy(line_name,config_linebuf,leave_num);

strcpy(buf_i,line_name);

a_trim(buf_o,buf_i);//删除两边空格

strcpy(line_name,buf_o);

//printf("line_name is %s,config_linebuf is %s,leave_num is %d\n",line_name,config_linebuf,leave_num);

if(strcmp(line_name,conf_name)==0)

{

strcat(sum_buf,line_name);

strcat(sum_buf,"=");

strcat(sum_buf,config_buff);

strcat(sum_buf,"\n");

alter_sign=1;

}

else

{

strcat(sum_buf,config_linebuf);

}

if(fgetc(f)==EOF)

{

break;

}

fseek(f,-1,SEEK_CUR);

memset(config_linebuf,0,sizeof(config_linebuf));

}

//printf("alter_sign=%d\n",alter_sign);

if(alter_sign == 0)

{

printf("no such \"%s\" in config file !\n",conf_name);

}

//printf("---config-file-content---\n%s\n-----------------------\n",sum_buf);

fclose(f);

FILE *fp;

fp=fopen(conf_path,"w+");

//printf("config_file is %s\n",conf_path);

if(fp==NULL)

{

printf("OPEN CONFIG FAILED\n");

return 2;

}

fseek(fp,0,SEEK_SET);

fputs(sum_buf,fp);

fclose(fp);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: