1.文件操作练习-模拟实现cp命令
实现思路:
1.open原文件
2.读取原文件内容到到缓冲区
3.open|creat目标文件
4.将缓冲区的内容写入目标文件
5.关闭原文件,目标文件
示例代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv)
{
if(argc!=3)
{
printf("pararm error!\r\n");
exit(-1);
}
int fdSrc=open(argv[1],O_RDWR);
char *buffer=NULL;
int size = lseek(fdSrc,0,SEEK_END);
buffer=(char *) malloc(sizeof(char)*size +8);
lseek(fdSrc,0,SEEK_SET);
read(fdSrc,buffer,size);
int fdDes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0760);
write(fdDes,buffer,strlen(buffer));
close(fdSrc);
close(fdDes);
return 0;
}
运行效果
2.修改配置文件
实现思路:
1.open文件
2.读出所有内容放入缓冲区
3.在缓冲区找到要修改的内容
4.重新将修改过的缓冲区内容写入文件
5.关闭文件
示例代码
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("pararm error!\r\n");
exit(-1);
}
int fdSrc=open(argv[1],O_RDWR);
char *buffer=NULL;
int size = lseek(fdSrc,0,SEEK_END);
buffer=(char *) malloc(sizeof(char)*size +8);
lseek(fdSrc,0,SEEK_SET);
read(fdSrc,buffer,size);
char *p = strstr(buffer,"LENG=");
if(p==NULL)
{
printf("not found!\r\n");
exit(-1);
}
p=p+strlen("LENG=");
*p='7';
lseek(fdSrc,0,SEEK_SET);
write(fdSrc,buffer,strlen(buffer));
close(fdSrc);
return 0;
}
原配置文件
修改后
3.向文件中写入结构体数组,并打印结构体数组内容
实现思路:
1.打开文件
2.将结构体数组1的所有内容写入文件
3.读出文件内容,放入结构体数组2
4.关闭文件
示例代码
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
struct Student{
char name[15];
int age;
};
int main(int argc,char **argv)
{
struct Student stus1[2]={{"xiaoming",18},{"xiaohong",17}};
struct Student stus2[2];
int fdSrc=open("./file1",O_RDWR|O_CREAT,0760);
write(fdSrc,&stus1,sizeof(struct Student)*2);
lseek(fdSrc,0,SEEK_SET);
read(fdSrc,&stus2,sizeof(struct Student)*2);
int i;
for(i=0;i<2;i++)
{
printf("meg:%s,%d\r\n",stus2[i].name,stus2[i].age);
}
close(fdSrc);
return 0;
}
执行效果
注意:查看file1的内容时会出现乱码,因为文件是以字符方式记录内容,而插入的内容不全是字符