cp命令基於LinuxC編寫的可文件拷貝

#include
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char* cutchar(char* tmp);
void mycp(char* src,char* dest);
void mycpr(char* src,char* dest);
void cleancd(char* old,char* new)
{
    int i=0;
    for(i=0;i<100;i++){
        old[i]=new[i];
    }    
}    
int main(int argc,char* argv[])
{
    int i,j;
    char ch;
    if(argc<3){
        printf("Using: %s -r src_file dest_file \n Using: %s src_file dest_file\n");
        exit(EXIT_FAILURE);
    }
    if(strcmp(argv[1],"-r")==0){
        mycpr(argv[2],argv[3]);
    }
    else
        mycp(argv[1],argv[2]);
    exit(EXIT_FAILURE);
}
void mycp(char* argv1,char* argv2)
{
    FILE* src= fopen(argv1,"r");
    if(src ==NULL){
        perror("fopen err. \n");
        exit(EXIT_FAILURE);
    }
    #if 1
    FILE* dest= fopen(argv2,"w+");
    if(dest == NULL){
        perror("fopen err. \n");
        exit(EXIT_FAILURE);
    }
    char ch='\0';
    while ((ch = fgetc(src))!=EOF){
        fputc(ch,dest);
    }
    #endif
    #if 0
    printf("%s   %s\n",argv1,argv2);
    char touch1[100]="touch ";
    strcat(touch1,argv2);
    system(touch1);
    #endif
    fclose(src);
    fclose(dest);
}
void mycpr(char* src,char* dest)
{
    char cdsrc[100];
    char cddest[100];
    char mkdirfile2[100]="mkdir ";
    strcat(mkdirfile2,dest);
    char mkdirfile3[100];
    cleancd(mkdirfile3,mkdirfile2);
    cleancd(cdsrc,src);
    cleancd(cdsrc,dest);
    system("touch txt");
    char lsfile1[110]="ls -Rl ";
    strcat(lsfile1,src);
    strcat(lsfile1,"> txt");
    system(lsfile1);
    FILE* ft=fopen("txt","r+");
    char tmp[81];
    memset(tmp,0,sizeof(tmp));
    char* cmp=NULL;
    int i=0;
    while((cmp=fgets(tmp,80,ft))!=NULL){
        i=0;
        while((tmp[i]!= ':')&&(tmp[i]!='\0'))
            i++;
        if(tmp[i]==':'&&tmp[i+1]=='\n'){
            tmp[i]='\0';
            cleancd(mkdirfile3,mkdirfile2);
            cleancd(cdsrc,src);
            cleancd(cddest,dest);
            strcat(mkdirfile3,tmp+strlen(src));
            strcat(cdsrc,tmp+strlen(src));
            strcat(cddest,tmp+strlen(src));
            system(mkdirfile3);
            //printf("%s\n",mkdirfile3);
        }
        char cmp[81]="/";
        char cdsrc1[100]="\0";
        strcat(cdsrc1,cdsrc);
        char cddest1[100]="\0";
        strcat(cddest1,cddest);
        if(tmp[0]=='-'){
            strcat(cmp,cutchar(tmp));
            strcat(cdsrc1,cmp);
            cdsrc1[strlen(cdsrc1)-1]='\0';
            strcat(cddest1,cmp);
            cddest1[strlen(cddest1)-1]='\0';
            mycp(cdsrc1,cddest1);
            //printf("%s\n",cmp);
            //printf("%s %s\n",cdsrc1,cddest1);
        }
    }
    system("rm -fr txt");
}

char* cutchar(char* tmp)
{
    char* p=NULL;
    char* pa=NULL;
    p = strtok(tmp," ");
    while(p!=NULL){
        pa=p;
        p=strtok(NULL," ");
    }
    return pa;
}
#if 0    
    if(src == NULL){
        perror("fopen err. \n");
        exit(EXIT_FAILURE);
    }
    FILE* dest = fopen(argv[2], "w");
    if(dest == NULL){
        perror("fopen err. \n");
        exit(EXIT_FAILURE);
    }
    char ch;
    while( (ch = fgetc(src)) != EOF){
        fputc(ch, dest);
    }        
    
    fclose(src);
    fclose(dest);}
#endif



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章