文件操作小应用
小项目之实现cp指令
指令:
vimdiff
使用 vimdiff 命令可以比较两个文件的差异,不同的地方高亮显示
1、C语言参数
cp src.c des.c
./a.out src.c des.c
./a.out 原文件 目标文件
argc🐤表示参数个数
argv🦅表示参数是谁
举例子:
./a.out src.c des.c 中有三个参数
第一个参数是:./a.out src.c des.c
第二个参数是:src.c
第三个参数是: des.c
#include <stdio.h>
int main(int argc,char **argv)
{
printf("总共有%d个参数\n",argc);
printf("第一个参数是:%s\n",argv[0]);
printf("第二个参数是:%s\n",argv[1]);
printf("第三个参数是:%s\n",argv[2]);
return 0;
}
测试结果:
实现cp指令代码:
#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;
int fdDes;
char *buf=(char *)malloc(sizeof(char)*128);
if(argc != 3){
printf("输入错误\n");
exit(-1);
}
fdSrc=open(argv[1],O_RDWR);
int file_size=lseek(fdSrc,0,SEEK_END);
lseek(fdSrc,0,SEEK_SET);
buf=(char *)malloc(sizeof(char)*file_size+8);
read(fdSrc,buf,file_size);
fdDes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
write(fdDes,buf,strlen(buf));
close(fdSrc);
close(fdDes);
return 0;
}
测试结果:
[root@xiuxiu File]# gcc demo11.c -o mycp
[root@xiuxiu File]# ./mycp demo11.c new.c
[root@xiuxiu File]# cat new.c
#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;
int fdDes;
char *buf=(char *)malloc(sizeof(char)*128);
if(argc != 3){
printf("输入错误\n");
exit(-1);
}
fdSrc=open(argv[1],O_RDWR);
int file_size=lseek(fdSrc,0,SEEK_END);
lseek(fdSrc,0,SEEK_SET);
buf=(char *)malloc(sizeof(char)*file_size+8);
read(fdSrc,buf,file_size);
fdDes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
write(fdDes,buf,strlen(buf));
close(fdSrc);
close(fdDes);
return 0;
}
[root@xiuxiu File]#
小项目之文件内容的修改
#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;
int fdDes;
char *buf=(char *)malloc(sizeof(char)*128);
if(argc != 2){
printf("输入错误\n");
exit(-1);
}
fdSrc=open(argv[1],O_RDWR);
int file_size=lseek(fdSrc,0,SEEK_END);
lseek(fdSrc,0,SEEK_SET);
buf=(char *)malloc(sizeof(char)*file_size+8);
read(fdSrc,buf,file_size);
char *p =strstr(buf,"年龄:");
if(p==NULL){
printf("没有找到该字符\n");
exit(-1);
}
char p2[]="33";
p=p+strlen("年龄:");
for(int i=1;i<=strlen(p2);i++){
*p=*p2;
p=p+i;
}
close(fdSrc);
//重新打开文件,使用O_TRUNC,把原来的内容完全覆盖掉
fdDes=open(argv[1],O_RDWR|O_TRUNC,0600);
write(fdDes,buf,strlen(buf));
close(fdDes);
return 0;
}
测试文件:
姓名:陈立臣
年龄:54岁
职业:企业培训老师
婚姻状况:已婚
测试结果:
姓名:陈立臣
年龄:33岁
职业:企业培训老师
婚姻状况:已婚