linux c实现myecho、mycat、mycp

myecho、mycat、mycp分别用于模拟系统命令echo、cat、cp
代码如下:
myecho

#include<stdlib.h>
#include<stdio.h>
int main(int argc,char *argv[]){
    if(argc==1){
            printf("Error:need parameter!\n");
            exit(0);
    }
    for(int i=1;i<argc;i++)
            printf("%s ",argv[i]);
    printf("\n");
    return 0;
}

mycat

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){
        FILE *fp;
        int fsize;
        char *buffer;

        if(argc!=2){
                printf("Error:parameter wrong...\n");
                exit(0);
        }

        fp=fopen(argv[1],"r");
        if(!fp){
                printf("Error:can't open the file!\n");
                exit(0);
        }

        fseek(fp,0,SEEK_END);
        fsize=ftell(fp);
        rewind(fp);

        buffer=(char*)malloc((1+fsize)*sizeof(char));
        if(!buffer){
                printf("Error:memory malloc wrong!\n");
                exit(0);
        }

        fread(buffer,1,fsize,fp);

        printf("%s\n",buffer);

        fclose(fp);
        free(buffer);

        return 0;

}

mycp

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]){
    FILE *fp;
    int fsize;
    int fr;
    char *buffer;

    if(argc!=3){
            printf("Error:wrong parameter...\n");
            return 0;
    }

    fp=fopen(argv[1],"r");
    if(!fp){
            printf("Error:can't open the file!\n");
            exit(0);
    }

    fseek(fp,0,SEEK_END);
    fsize=ftell(fp);
    rewind(fp);

    buffer=(char *)malloc((1+fsize)*sizeof(char));
    if(!buffer){
            printf("Error:memory wrong!\n");
            exit(0);
    }

    fr=fread(buffer,1,fsize,fp);
    if(!fr){
            printf("Error:read wrong!\n");
            exit(0);
    }

    fclose(fp);

    fp=fopen(argv[2],"w");
    if(!fp){
            printf("Error:open file wrong!\n");
            exit(0);
    }

    fwrite(buffer,1,fsize,fp);

    fclose(fp);
    free(buffer);
    return 0;

}

欢迎留言交流。。。。

猜你喜欢

转载自blog.csdn.net/betterc5/article/details/80636877