cp命令基于LinuxC编写的可文件拷贝

#include <stdio.h>
#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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值