概述
1.首先我们前面介绍了那么多关于文件的api,今天来记录一下strstr
函数。
函数原型:
char *strstr(const char *haystack, const char *needle);
返回值:返回一个char
型的指针,(返回一个指针指向目的字符串开头位置的指针),如果没有找到的话,则返回NULL
。
作用:用于判断字符串needle
是否是haystack
的子串;如果是,则该函数返回needle
在haystack
中首次出现的地址;否则返回NULL
。
haystack
:将要被查找的目标字符串。
needle
:将要被查找的对象字符串。
上代码:
pstr = strstr(readBuf,"YTRE=");
if(pstr == NULL)
{
printf("faild to foundn");
exit(-1);
}
pstr = pstr + strlen("YTRE=");
*pstr = '7';
修改YTRE=后面的数字:在readBuf缓冲区中读取“YTRE=”的字符串的首位,并返回给指针pstr,指针接收到后进行指针的偏移“YTRE=”那么长的长度,再将偏移后的指针的位置的内容修改即可,最后写回原来的文件中。
直接上代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if(argc != 2)
{
printf("parameter error!!n");
exit(-1);
}
int fd;
int fd_size;
char *readBuf = NULL;
char *pstr = NULL;
fd = open(argv[1],O_RDWR);
fd_size = lseek(fd,0,SEEK_END);
lseek(fd,0,SEEK_SET);
readBuf = (char *)malloc(sizeof(char)*fd_size+3);
read(fd,readBuf,fd_size);
pstr = strstr(readBuf,"YTRE=");
if(pstr == NULL)
{
printf("faild to foundn");
exit(-1);
}
pstr = pstr + strlen("YTRE=");
*pstr = '7';
lseek(fd,0,SEEK_SET);
write(fd,readBuf,fd_size);
close(fd);
return 0;
}
进行函数封装的优化:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
char* change(char *read,char *str)
{
char *pstr = NULL;
pstr = strstr(read,str);
if(pstr == NULL)
{
printf("Sorry ,faild to foundn");
exit(-1);
}
pstr = pstr + strlen(str);
*pstr = '3';
return pstr;
}
int main(int argc, char **argv)
{
if(argc != 2)
{
printf("parameter error!!n");
exit(-1);
}
int fd;
int fd_size;
char *readBuf = NULL;
char *pstr = NULL;
fd = open(argv[1],O_RDWR);
fd_size = lseek(fd,0,SEEK_END);
lseek(fd,0,SEEK_SET);
readBuf = (char *)malloc(sizeof(char)*fd_size+3);
read(fd,readBuf,fd_size);
pstr = change(readBuf,"YTRE=");
lseek(fd,0,SEEK_SET);
write(fd,readBuf,fd_size);
close(fd);
return 0;
}
2.分别将一个整数,结构体和结构数组写进文件里。
(1)将一个整数写进文件里,直接上代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd;
int data1 = 10;
int data2;
fd = open("./file1",O_RDWR);
write(fd,&data1,sizeof(int));
lseek(fd,0,SEEK_SET);
read(fd,&data2,sizeof(int));
printf("read:%dn",data2);
close(fd);
return 0;
}
(2)将一个结构体写进文件里
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct Test
{
char a;
int ab;
};
int main()
{
int fd;
struct Test data1 = {'d',15};
struct Test data2;
fd = open("./file1",O_RDWR);
write(fd,&data1,sizeof(struct Test));
lseek(fd,0,SEEK_SET);
read(fd,&data2,sizeof(struct Test));
printf("read:%c, %dn",data2.a,data2.ab);
close(fd);
return 0;
}
(3)将一个结构体数组写进文件里
直接上代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct Test
{
char a;
int ab;
};
int main()
{
int fd;
struct Test data1[2] = {{'d',15},{'a',13}};
struct Test data2[2];
fd = open("./file1",O_RDWR);
write(fd,data1,sizeof(struct Test)*2);
lseek(fd,0,SEEK_SET);
read(fd,data2,sizeof(struct Test)*2);
printf("read: %c, %dn",data2[0].a,data2[0].ab);
printf("read: %c, %dn",data2[1].a,data2[1].ab);
close(fd);
return 0;
}
学习笔记,仅供参考。
最后
以上就是包容红酒为你收集整理的Linux文件之strstr函数、将一个整数,结构体和结构体数组写进文件里的全部内容,希望文章能够帮你解决Linux文件之strstr函数、将一个整数,结构体和结构体数组写进文件里所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复