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);
}
#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);
}
相关文章推荐
- linux 如何查看防火墙是否开启
- linux查看机器信息:cpu、内存和磁盘
- Centos搭建SVN服务器三步曲
- facl以及linux终端
- linux套件安装过程中configure,make,make install的作用
- CentOS下以RPM方式安装MySQL5.5
- linux下软件的下载,安装
- linux查看进程情况的命令
- linux下samba共享中文乱码解决办法
- linux 替换空格脚本 截取()内部内容脚本
- linux文件名的限制
- Linux下2.4G无线模块驱动程序_NRF24L01
- Linux系统,git服务器搭建
- Linux常用命令
- linux Kernel module简单模拟ps指令输出
- Linux安装
- 工信部表态支持Linux,可是Linux又是什么呢?
- archlinux的JDK默认安装路径
- linux归档和压缩
- Linux下无线配置工具