zoukankan      html  css  js  c++  java
  • linux系统编程:自己动手写一个cp命令

    cp命令的基本用法: cp 源文件 目标文件

    如果目标文件不存在 就创建, 如果存在就覆盖

    实现一个cp命令其实就是读写文件的操作:

    对于源文件: 把内容全部读取到缓存中,用到的函数read

    对于目标文件: 把缓存中的内容全部写入到目标文件,用到的函数creat

     1 /*================================================================
     2 *   Copyright (C) 2018 . All rights reserved.
     3 *   
     4 *   文件名称:mycp.c
     5 *   创 建 者:ghostwu(吴华)
     6 *   创建日期:2018年01月08日
     7 *   描    述:cp命令编写
     8 *
     9 ================================================================*/
    10 
    11 #include <stdio.h>
    12 #include <stdlib.h>
    13 #include <sys/types.h>
    14 #include <sys/stat.h>
    15 #include <fcntl.h>
    16 #include <unistd.h>
    17 
    18 #define COPYMODE 0644
    19 #define BUF 4096
    20 
    21 int main(int argc, char *argv[])
    22 {
    23     if ( argc != 3 ){
    24         printf( "usage:%s source destination
    ", argv[0] );
    25         exit( -1 );
    26     }
    27 
    28     int in_fd = -1, out_fd = -1;
    29 
    30     if( ( in_fd = open( argv[1], O_RDONLY ) ) == -1 ) {
    31         perror( "file open" );
    32         exit( -1 );
    33     }
    34 
    35     if ( ( out_fd = creat( argv[2], COPYMODE ) ) == -1 ) {
    36         perror( "file copy" );
    37         exit( -1 );
    38     }
    39     
    40     char n_chars[BUF];
    41     int len = 0;
    42     
    43     while( ( len = read( in_fd, n_chars, sizeof( n_chars ) ) ) > 0 ) {
    44         if ( write( out_fd, n_chars, len ) != len ) {
    45             printf( "文件:%s发生copy错误
    ", argv[2] );
    46             exit( -1 );
    47         }
    48     }
    49     if( len == -1 ) {
    50         printf( "读取%s文件错误
    ", argv[1] );
    51         exit( -1 );
    52     }
    53     
    54     if( close( in_fd ) == -1 ) {
    55         printf( "文件%s关闭失败
    ", argv[1] );
    56         exit( -1 );
    57     }
    58     if( close( out_fd ) == -1 ) {
    59         printf( "文件%s关闭失败
    ", argv[2] );
    60         exit( -1 );
    61     }
    62 
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    十大经典算法总结
    十大经典算法总结
    MySQL主从同步模拟
    MySQL主从同步模拟
    高斯定理
    高斯定理
    如何修改数据决策系统登陆地址为ip
    如何修改数据决策系统登陆地址为ip
    数据库连接池问题 Max Pool Size
    数据库连接池问题 Max Pool Size
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8244376.html
Copyright © 2011-2022 走看看