Linux C实现cp功能(二)

2014-11-23 22:06:53 · 作者: · 浏览: 41
1","");


//判断最后是否写入


if(n_chars == -1)


oops("Read error from,path1","");


//关闭文件


if(close(in_fd) == -1||close(out_fd) == -1)


oops("Error closing files","");


}




void oops(char *s1,char *s2)


{


fprintf(stderr,"Error:%s ",s1);


perror(s2);


exit(1);


}




int exists(char *filename)


{


return access(filename,F_OK);



}



int is_file(char *filename)


{


struct stat filebuf;


stat(filename,&filebuf);


if(S_ISREG(filebuf.st_mode))


return 1;


else


return 0;


}



char *deal_with(char *filename,char *filename2)


{


char *file=NULL;;


if((file = (char *)malloc(strlen(basename(filename))+strlen(filename2)+3)) == NULL)


perror("malloc error");


else{


if(filename2[strlen(filename2)-1] == '/'){


strcpy(file,filename2);


strcat(file,basename(filename));


}else{


strcpy(file,filename2);


strcat(file,"/");


strcat(file,basename(filename));


}


}


return file;


}



char *deal_path(char *file,char *file2)


{


char *filename=NULL;


if((filename = (char *)malloc(strlen(file)+strlen(file2)+3)) == NULL)


perror("Malloc erro:");


else{



if(file[strlen(file)-1] == '/'){


strcpy(filename,file);


strcat(filename,file2);


}else{


strcpy(filename,file);


strcat(filename,"/");


strcat(filename,file2);


}


}


return filename;



}


用的最多的还是这个deal_path这个函数,这个函数会判断/tmp/ /tmp这个的区别,最终会将给出的


两个参数合并成一个文件路径创建并写入要拷贝的内容。


四:总结


C语言基础很重要,最近在看C专家编程,C和指针,感触很深里面很多C语言的细节我都不知道。还有linux C编程实战中的关于结构体的字节对齐我也知之甚少。后期会用博客记录相关内容加深自己对这些内容的理解。