Linux系统编程篇—文件编程(五)应用二(修改配置文件)
作者:互联网
修改config文件主要运用了前几讲文件基本的读取写入API,同时额外增加了一个==字符串搜索匹配API(strstr)==的使用。
config文件
config文件一般是软件中的配置文件,我们经常玩的许多有效都拥有其的配置文件,存放游戏数据的speed、leng等等参数。
函数名:strstr
包含文件:
#include<string.h>
函数原型:
char *strstr(char *str1, const char *str2);
语法:
* strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:
若str2是str1的子串,则返回str2在str1的首次出现的首地址;
如果str2不是str1的子串,则返回NULL。
实例:
目标config文件内容:
speed=5
leng=100
SCORE=90
LEVEL=95
代码:
int main(int argc,char**argv)
{
/*判断传入参数是否符合*/
if(argc<2){
printf("pararm num error!\n");
exit(-1);
}
char *readbuf=NULL;//初始化读取原文件得到数据的存储地址
int fd_scr=0;//初始化原文件的文件描述符
/*读取config文件现存值*/
int scr_size=0;//初始化原文件的大小
int read_num=0;//初始化读取read函数的返回值
fd_scr=open(argv[1],O_RDWR);//打开argv[1]传入的文件
printf("open scr_file success\n");
scr_size=lseek(fd_scr,0,SEEK_END);//巧用光标移动的返回值,计算文件大小
lseek(fd_scr,0,SEEK_SET);//移回光标,方便下面进行读取
readbuf=(char*)malloc(sizeof(char)*scr_size+8);//为读取原文件得到数据的存储分配空间,此处多分配了8个,防止空间溢出
read_num=read(fd_scr,readbuf,scr_size);//读取原文件的内容存入readbuf,同时利用返回值,打印读取了多少个字符
printf("first read data num:%d\n",read_num);
printf("first content=\n%s\n",readbuf);
char *p=strstr(readbuf,"leng=");//在从config文件读取的内容中查找子串“leng=”,成功返回子串首次出现的首地址,失败返回NULL
if(p==NULL){
printf("not found\n");
exit(-1);
}
p=p+strlen("leng=");
*p ='5';//更改“leng=”后的数据,更改的值为字符,故有''
/*更改config文件值后第二次读取*/
if(read_num!=-1){
printf("second read data num:%d\n",read_num);
}
printf("second content=\n%s\n",readbuf);
lseek(fd_scr,0,SEEK_SET);//移回光标,方便下面进行读取
write(fd_scr,readbuf,read_num);//将readbuf修改后的内容写入原文件
close(fd_scr);//关闭原文件
return 0;
}
~
实验结果:
标签:读取,配置文件,read,编程,num,readbuf,Linux,原文件,scr 来源: https://blog.csdn.net/weixin_44933419/article/details/112781052