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\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

 

posted @ 2018-01-08 19:05  ghostwu  阅读(1802)  评论(0编辑  收藏  举报
Copyright ©2017 ghostwu