修改配置文件参数
修改单个参数
代码思路:
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;
}