该应用主要调用到strstr函数,我们只需调用该函数并传入相关文件和修改数值即可,下面就是对strstr函数的定义解读以及实现案例
1.调用strstr函数需要包含以下头文件
#include<string.h>
2.函数定义格式
char *strstr(char *str1, const char *str2);//返回值为字符型指针
3.函数参数解读:
str1 | 被查找的目标:系统里的某个文件 |
str2 | 要查找的对象:文件里的某个数值 |
4.函数的功能
1、找到所搜索的字符串,则该函数返回第一次匹配的字符串的首地址;
2、如果未找到所搜索的字符串,则返回NULL。
5.实例
(1).原文件config内容
speed=5
leng=100
sorce=90
level=95
(2).代码展示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdSrc;
char *readBuf = NULL;
if(argc != 2)
{
printf("insert error\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR);//打开传进来的文件config
int size = lseek(fdSrc,0,SEEK_END);//运用光标计算文件字节数
lseek(fdSrc,0,SEEK_SET);
readBuf = (char* )malloc(sizeof(char)*size + 8);
int n_read = read(fdSrc,readBuf,size);//将config中的内容存放在readBuf
char *p = strstr(readBuf,"leng=50");//在readBuf中寻找leng=50
if(p == NULL)
{
printf("not found\n");
exit(-1);
}
p = p+strlen("leng=50");//p指向leng=50的下一个地址
*p = '5';//修改地址数据
//lseek(fdSrc,0,SEEK_SET);//每次修改后会在数据下面显示修改后的数据,需要让光标移到最前面,写入的时候才原来的数据才会消失,但我们为了给大家更好做对比,这里我们不把光标移到最前面,当然实际工作中修改数据后前面的数据应该消失
int n_write = write(fdSrc,readBuf,strlen(readBuf));
close(fdSrc);
return 0;
}
前面4行是原文件内容,后面4行是代码编译后的文件内容。由编译结果可知,将leng=50的下一位0修改成5(这里修改的是字符串),其结果为leng=505,实现了配置文件的修改。