zoukankan      html  css  js  c++  java
  • OSLab课堂作业1

       

    日期:2019/3/16

    作业:实现命令cat, cp, echo。

    myecho命令

    #include <stdio.h>

    int main(int argc, char *argv[])

    {

        int i = 0;

        printf("argument count = %d ", argc);

        for (; i < argc; i++)

            printf("%s ", argv[i]);

        return 0;

    }

     

       

    mycat命令

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <sys/stat.h>

    #include <fcntl.h>

    static char buf[256] = {0};

    int main(int argc, char *argv[])

    {

        printf("Running program is %s ", argv[0]);

        printf("Argument count is %d ", argc);

        printf("File name is %s ", argv[1]);

        int file_desc = open(argv[1], O_RDONLY);

        if (file_desc == -1)

        {

            perror("file is not existed!");

            exit(EXIT_FAILURE);

        }

        int flag = read(file_desc, buf, 255);

        while (flag != 0 && flag != -1)

        {

            printf("%s", buf);

            memset(buf, 0, sizeof(buf));

            flag = read(file_desc, buf, 255);

        }

        return 0;

    }

     

     

     

       

    mycp命令

    不支持dst为目录的cp命令。

    #include <stdio.h>

    #include <stdlib.h>

    #include <sys/stat.h>

    #include <fcntl.h>

    #include <unistd.h>

    static char buf[256] = {0};

    int main(int argc, char *argv[])

    {

        printf("src is %s ", argv[1]);

        printf("dst is %s ", argv[2]);

        int src = open(argv[1], O_RDONLY);

        if (src == -1)

        {

            perror("file doesn't exist! ");

            exit(EXIT_FAILURE);

        }

        int dst = open(argv[2], O_RDWR | O_CREAT);

        int flag = read(src, buf, 255);

        while (flag != 0 && flag != -1)

        {

            write(dst, buf, 255);

            memset(buf, 0, sizeof(buf));

            flag = read(src, buf, 255);

        }

        return 0;

    }

     

    mycp2命令

    支持dst为目录。

    #include <sys/types.h>

    #include <dirent.h>

    #include <string.h>

    #include <stdio.h>

    #include <stdlib.h>

    #include <sys/stat.h>

    #include <fcntl.h>

    #include <unistd.h>

    static char buf[256] = {0};

    void cp_to_file(int src, int dst)

    {

        int flag = read(src, buf, 255);

        while (flag != 0 && flag != -1)

        {

            write(dst, buf, flag);

            memset(buf, 0, sizeof(buf));

            flag = read(src, buf, 255);

        }

        close(src);

        close(dst);

    }

    int main(int argc, char *argv[])

    {

        printf("src is %s ", argv[1]);

        printf("dst is %s ", argv[2]);

        int src = open(argv[1], O_RDONLY);

        if (src == -1)

        {

            perror("file doesn't exist! ");

            exit(EXIT_FAILURE);

        }

        int dst;

        DIR *pdir = opendir(argv[2]);

        if (pdir == NULL)

        { //dst is file

            dst = open(argv[2], O_RDWR | O_CREAT);

            cp_to_file(src, dst);

        }

        else

        { //dst is dir

            printf("%s is a dir ", argv[2]);

            char temp[256];

            strcpy(temp, argv[2]);

            if (temp[strlen(temp) - 1] != '/')

                strcat(temp, "/");

            strcat(temp, argv[1]);

            puts(temp);

            dst = open(temp, O_RDWR | O_CREAT);

            cp_to_file(src, dst);

        }

        return 0;

    }

     

      

  • 相关阅读:
    React Native For Android 环境搭建
    MySql 打开日志文件
    PHP使用JSON通信
    PHPStorm 调式JS /同时调式PHP和jS
    PHP list,explode的使用
    PHP foreach使用
    PHP eof的使用
    使用Spring缓存的简单Demo
    android源码的目录结构
    在Ubuntu上安装LAMP服务器
  • 原文地址:https://www.cnblogs.com/sinkinben/p/10582002.html
Copyright © 2011-2022 走看看