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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM