10.文件编程小应用之【修改程序的配置文件】
转载:沈上青灯
编程思路:
利用main参数(main参数的简解)
打开要修改的文件
将要修改文件的内容读到 buf
利用字符串API之strstr( ) 找到要修改的子串的位置,修改内容
将修改后的buf写回源文件
close关闭文件
#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;//file description
char *readBuf=NULL;
if(argc != 2){
printf("pararm error\n");
exit(-1);
}
fdSrc=open(argv[1],O_RDWR);//以参数的方式传递配置文件./a.out TEST.config
int size = lseek(fdSrc,0,SEEK_END);//利用lseek返回值计算文件的大小
readBuf = (char *)malloc(sizeof(char)*size + 8);
lseek(fdSrc,0,SEEK_SET);
int n_read = read(fdSrc,readBuf,size);//2.将要修改文件的内容读到 readbuf
char *p=strstr(readBuf,"LEND=");//3.利用字符串API之strstr( ) 找到要修改的子串的 位置,返回的是子串的 L 的地址
if(p==NULL){
printf("not found\n");
exit(-1);
}
p = p+strlen("LEND=");//指针偏移到 = 号后一位,但是写进文件的时候必须是字符
strncpy(p,"5",3);// *p = '5';
lseek(fdSrc,0,SEEK_SET);//防止文件从光标后面添加
int n_write = write(fdSrc,readBuf,size);//4.将修改后的buf写回源文件
close(fdSrc);
return 0;
}
```或者通过open直接打开文件
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fdSrc;//file description
char *readBuf=NULL;
fdSrc=open("TEST.config",O_RDWR);//以参数的方式传递配置文件./a.out TEST.config
int size = lseek(fdSrc,0,SEEK_END);//利用lseek返回值计算文件的大小
readBuf = (char *)malloc(sizeof(char)*size + 8);
lseek(fdSrc,0,SEEK_SET);
int n_read = read(fdSrc,readBuf,size);//2.将要修改文件的内容读到 readbuf
char *p=strstr(readBuf,"LEND=");//3.利用字符串API之strstr( ) 找到要修改的子串的 位置,返回的是子串的 L 的地址
if(p==NULL){
printf("not found\n");
exit(-1);
}
p = p+strlen("LEND=");//指针偏移到 = 号后一位,但是写进文件的时候必须是字符
strncpy(p,"101",3);
lseek(fdSrc,0,SEEK_SET);//防止文件从光标后面添加
int n_write = write(fdSrc,readBuf,size);//4.将修改后的buf写回源文件
close(fdSrc);
return 0;
}
## 2.字符串的拷贝API:strncpy()
```c
原型:char *strncpy(char *destinin, char *source, int maxlen);
- 第一个参数dest:目标
- 第二个参数src:源
- 第三个参数src:最大长度,就是要拷贝几个
memset(strDest,'\0',128); 初始化,重置数组。这里用sizeof(strDest)/sizeof(strDest[0])结果会出错(细节)
strncpy(strDest,"TheLuk",3);
puts(strDest);
- 输出的结果是:The