使用系统IO实现一个带覆盖检测的cp命令
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<unistd.h>
int find(const char*test)
{
FILE *fp=fopen(test,"rb");
if(fp==NULL)
{
perror("fp");
return 1;
}
fseek(fp,0,SEEK_END);
long size=ftell(fp);
fclose(fp);
return size;
}
int copy_file(char *src_file,char *dest_file)
{
int dest_find=open(dest_file,O_RDONLY);
if(dest_find!=-1)
{
char choice;
printf("%s,是否要覆盖(y/n)",dest_file);
scanf("%c",&choice);
if(choice!='y'&&choice!='Y')
{
printf("%s,文件未被覆盖",dest_file);
return 1;
}
}
int src_find=open(src_file,O_RDONLY);
if(src_find<0)
{
perror("src_find");
return 1 ;
}
dest_find=open(dest_file,O_WRONLY|O_CREAT | O_TRUNC, S_IRUSR| S_IWUSR|S_IRGRP|S_IROTH);
if(dest_find<0)
{
perror("dest_file");
return 1;
}
int a=find(sc_file);
char buff[a];
a=read(src_find,buff,a));
write(dest_find,buff,a);
close(src_find);
close(dest_find);
if(a<0)
{
perror("a");
return 1;
}
return 0;
}
int main(int argc, char* argv[])
{
if(argc!=3)
return 1;
copy_file(argv[1],argv[2]);
return 0;
}