linux系统编程:自己动手写一个cp命令,linuxcp


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\n", 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错误\n", argv[2] ); 46 exit( -1 ); 47 } 48 } 49 if( len == -1 ) { 50 printf( "读取%s文件错误\n", argv[1] ); 51 exit( -1 ); 52 } 53 54 if( close( in_fd ) == -1 ) { 55 printf( "文件%s关闭失败\n", argv[1] ); 56 exit( -1 ); 57 } 58 if( close( out_fd ) == -1 ) { 59 printf( "文件%s关闭失败\n", argv[2] ); 60 exit( -1 ); 61 } 62 63 return 0; 64 } View Code

 

相关内容