修改配置文件

修改配置文件参数

修改单个参数

代码思路:
1、打开配置文件
2、用光标计算配置文件大小
3、拨动光标到文件头
4、根据计算得到的文件大小,开辟相对大一点的缓存内存空间
5、把打开的文件内容写入到缓存空间内
6、然后把要修改的参数与文件内的内容对比,使得光标移动到文件内对应要修改参数的字符串的头,所以在这要移动对应文件参数大小的位置
7、移动到要修改参数的位置,根据需求修改参数
8、然后把文件的光标移到文件头,写入修改好的缓存空间内容
9、关闭打开的文件

注意:
此项方法只能修改单个字符

配置文件:TEST.config

SPEED=8
LENG=3
SCORE=4
LEVEL=6

执行代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

void gai(char *Buf)
{
        char *leng = "LENG=";
        char *p = strstr(Buf, leng);
        if(p == NULL){
                printf("not found");
                exit(-1);
        }
        p = p + strlen(leng);
        printf("Please input LENG it parameter:\n");
        scanf("%c",p);
        //*p = '4';
}

int main(int argc, char **argv)
{
        if(argc != 2){
                printf("pararm error\n");
                exit(-1);
        }
        int fdSrc;
        fdSrc = open(argv[1],O_RDWR);
        int size = lseek(fdSrc, 0, SEEK_END);
        lseek(fdSrc, 0, SEEK_SET);
        char *readBuf = NULL;
        readBuf = (char *)malloc(sizeof(char)*size + 3);
        int n_read = read(fdSrc, readBuf, size);
        gai(readBuf);
        lseek(fdSrc, 0, SEEK_SET);
        int n_write = write(fdSrc, readBuf, strlen(readBuf));
        close(fdSrc);
        return 0;
}

修改多位参数

代码思路:
1、打开配置文件
2、用光标计算配置文件大小
3、拨动光标到文件头
4、根据计算得到的文件大小,开辟相对大一点的缓存内存空间
5、把打开的文件内容写入到缓存空间内
6、关闭打开的文件
7、输入选择要修改那项参数
8、然后把要修改的参数与文件内的内容对比,使得光标移动到文件内对应要修改参数的字符串的头,所以在这要移动对应文件参数大小的位置
9、计算字符串光标之前内容的大小
10、开辟存放字符串前面内容的空间
11、将文件字符串当前光标之前的内容拷贝到缓存空间
12、然后对比文件字符串后面的内容
13、从下一个参数开始到末尾切取出来拷贝到新开辟的一个内存空间
14、开辟需要修改参数的大小空间
15、写入参数
16、把现在这个写入参数的内容空间拼接到前面存放文件字符串前半部分的后面
17、再文件字符串后面拼接好之前切取出来的后面那段字符串内容
18、清空缓存区内容,把修改好的字符串内容写入到缓存区空间
19、清楚原有文件内容方式打开文件
8、然后写入修改好的缓存空间内容
9、关闭打开的文件

注意:
此项方法能修改多位字符

配置文件:TEST.config

SPEED=8
LENG=3
SCORE=4
LEVEL=6

执行代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

void gai(char *Buf)
{
	char *speed = "SPEED=";
	char *leng = "LENG=";
	char *score = "SCORE=";
	char *level = "LEVEL=";
	int num;
	printf("Please input the parameter to modify:\n");
	scanf("%d",&num);
	char *a = (char *)malloc(sizeof(char)*10);
	memset(a, 0, sizeof(a));
	switch(num){
		case 1:
			strcpy(a, speed);
			break;
		case 2:
			strcpy(a, leng);
			break;
		case 3:
			strcpy(a, score);
			break;
		case 4:
			strcpy(a, level);
			break;
	}
	char *p = strstr(Buf, a);
	if(p == NULL){
		printf("not found");
		exit(-1);
	}
	p = p + strlen(a);
	int size = strlen(Buf) - strlen(p);
	char *front = (char *)malloc(sizeof(char)*size+3);
	memset(front, 0, sizeof(front));
	strncpy(front, Buf, size);
	char *later = NULL;
	char *tmp = NULL;
	if(strcmp(a, speed) == 0){
		tmp = strstr(p,leng);
		later = (char *)malloc(sizeof(char)*strlen(p)+3);
		memset(later, 0, sizeof(later));
		strcpy(later,tmp);
	}
	else if(strcmp(a, leng) == 0){
		tmp = strstr(p, score);
		later = (char *)malloc(sizeof(char)*strlen(p)+3);
		memset(later, 0, sizeof(later));
		strcpy(later,tmp);
	}
	else if(strcmp(a, score) == 0){
		tmp = strstr(p, level);
		later = (char *)malloc(sizeof(char)*strlen(p)+3);
		memset(later, 0, sizeof(later));
		strcpy(later,tmp);
	}
	char *n_input = (char *)malloc(sizeof(char)*6);
	memset(n_input,0,sizeof(n_input));
	printf("Please input %s it parameter:\n",a);
	scanf("%s",n_input);
	strcat(front,n_input);
	strcat(front,"\n");
	strcat(front,later);
	memset(Buf, 0, sizeof(Buf));
	strcpy(Buf,front);
}

int main(int argc, char **argv)
{
	if(argc != 2){
		printf("pararm error\n");
		exit(-1);
	}
	int fdSrc;
	fdSrc = open(argv[1],O_RDWR);
	int size = lseek(fdSrc, 0, SEEK_END);
	lseek(fdSrc, 0, SEEK_SET);
	char *readBuf = NULL;
	readBuf = (char *)malloc(sizeof(char)*size + 3);
	memset(readBuf, 0, sizeof(readBuf));
	int n_read = read(fdSrc, readBuf, size);
	close(fdSrc);
	
//	printf("%s",readBuf);
	
	gai(readBuf);

	printf("%s",readBuf);
	
	fdSrc = open(argv[1],O_RDWR|O_TRUNC);
	int n_write = write(fdSrc, readBuf, strlen(readBuf));
	close(fdSrc);
	free(readBuf);
	readBuf = NULL;
	
	return 0;
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值