系统相关
首页 > 系统相关> > Linux系统编程篇—文件编程(五)应用二(修改配置文件)

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