修改程序的配置文件
场景:一配置文件有如下内容,需将LENG =3改成LENG = 5
SPEED=3
LENG=3
SCORE=9
LEVEL=0
程序思路:
1.找到文件头的位置
2.往后移,用地址++的方式找到需要更改的位置
3.修改文件内容
找需要更改的位置可用strstr函数
函数名: strstr
功 能: 在串中查找指定字符串的第一次出现
用 法: char *strstr(char *str1, char *str2);
strstr原型:extern char *strstr(char *haystack, char needle);
用法:#include <string.h>
功能:从字符串haystack中寻找needle第一次出现的位置。
说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
strstr函数找到目标文本后,用p=p+strlen(“LENG=”)使光标移到需要修改的位置。再用p='5’这句函数,指针取内容,替换为5。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdsrc;
char *readbuf=NULL;
if(argc!=2){
printf("param error\ni");
exit(-1);
}
fdsrc=open(argv[1],O_RDWR);
int size=lseek(fdsrc,0,SEEK_END);
lseek(fdsrc,0,SEEK_SET);
readbuf=(char *)malloc(sizeof(size)+8);
int n_read=read(fdsrc,readbuf,size);
char *p=strstr(readbuf,"LENG=");
if(p==NULL){
printf("not found\n");
exit(-1);
}
p=p+strlen("LENG=");
*p='5';
lseek(fdsrc,0,SEEK_SET);
int n_write=write(fdsrc,readbuf,strlen(readbuf));
close(fdsrc);
return 0;
}
注意:把buf缓存的内容写到配置文件里之前,需要 lseek(fdsrc,0,SEEK_SET)把光标移到文件头,这样就可以覆盖写入。最后gcc编译运行,可以看到配置文件里3已结成功改成5了。