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

时间:2021-11-20 22:27:29

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

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

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

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

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

linux系统编程:自己动手写一个cp命令linux系统编程:自己动手写一个cp命令
 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