Linux系统手动实现一个简单cp功能

Linux系统手动实现一个简单cp功能

  大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客

本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!

博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客


  文本将来实现一个Linux系统中的一个简单的cp功能命令(本文中的cp功能十分简陋,仅能够实现基本的复制操作)。

  我们这里是使用c语言进行实现的,这里仅是简单的进行一个复制的功能实现和错误的输出。如果打开失败,则输出文件打开错误,否则我们开始读取输入的文件,并且输出到我们的输出文件,如果输出时发生错误,则进行相应的报错。

​ 实现的代码为:

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

#define COPYMODE 0644
#define BUF 4096

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

    int in_fd = -1, out_fd = -1;
    char n_chars[BUF];
    int len = 0;
    // 如果打开失败,则报错
    if( ( in_fd = open( argv[1], O_RDONLY ) ) == -1 ) {
        perror( "file open" );
        exit( -1 );
    }

    if ( ( out_fd = creat( argv[2], COPYMODE ) ) == -1 ) {
        perror( "file copy" );
        exit( -1 );
    }
    
    // 一遍读取,一遍输入
    while( ( len = read( in_fd, n_chars, sizeof( n_chars ) ) ) > 0 ) {
        if ( write( out_fd, n_chars, len ) != len ) {
            printf( "文件:%s发生copy错误\n", argv[2] );
            exit( -1 );
        }
    }
    if( len == -1 ) {
        printf( "读取%s文件错误\n", argv[1] );
        exit( -1 );
    }
    
    if( close( in_fd ) == -1 ) {
        printf( "文件%s关闭失败\n", argv[1] );
        exit( -1 );
    }
    if( close( out_fd ) == -1 ) {
        printf( "文件%s关闭失败\n", argv[2] );
        exit( -1 );
    }

    return 0;
}

  我们将它编译为myCP文件,然后我们将它加入到我们的/usr/local/bin中,我们就可以使用这个命令了。其实这里的复制也已经可以使用我们刚刚写好的这个myCP来实现了,大家可以根据自己的文件位置来修改。我的命令为:myCP /Users/qiguan/ttttttttttt/myCP /usr/local/bin/

  下面我们来进行测试我们的命令,我们输入myCP 第一个文件 第二个文件,然后我们的执行效果为:

在这里插入图片描述

我们可以看到我们已经实现了复制的基本功能。

  好了,本期博文就到这里了,博主也是在学习这方面的相关知识中,本文仅为一些简单的实现

  大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客

本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!

博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客

原创文章 252 获赞 2480 访问量 35万+

猜你喜欢

转载自blog.csdn.net/qq_43422111/article/details/105887959