#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>
#include <sys/stat.h>
int main(int argc,char *argv[])
{
if(argc != 3)
{
printf("Usages: cp srcfile decfile\n");
exit(0);
}
struct stat _stat;
stat(argv[1],&_stat);
if(!S_ISREG(_stat.st_mode))
{
printf("is not regular file!\n");
exit(0);
}
stat(argv[2],&_stat);
char decfile[1024]={0};
strcpy(decfile,argv[2]);
if(S_ISDIR(_stat.st_mode))
{
char filename[64] = {0};//保存文件名字-无路径
strcpy(filename,argv[1]);
char *tmp = strchr(argv[1],'/');
while(tmp != NULL)
{
strcpy(filename,tmp);
tmp = strchr(tmp,'/');
}
int lastchar = strlen(decfile);
if(decfile[lastchar - 1] != '/')
{
decfile[lastchar - 1] = '/';
decfile[lastchar]='\0';
}
strcat(decfile,filename);
printf("%s\n",decfile);
}
int fdr = open(argv[1],O_RDONLY);
assert(fdr != -1);
int fdw = open(decfile,O_WRONLY|O_CREAT|O_TRUNC,0644);
assert(fdw != -1);
char cachestr[128]={0};
int current_size = 1;
while(current_size != 0)
{
current_size = read(fdr,cachestr,128);
write(fdw,cachestr,current_size);
}
close(fdr);
close(fdw);
exit(0);
}