linux环境编程之——cp

#include <stdio.h>                                                                                                                                                                                                                                      
#include <unistd.h>                                                                     
#include <fcntl.h>                                                                      
#include <stdlib.h>                                                                     
                                                                                        
#define BUFSIZE 4096                                                                    
#define MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH      //创建新文件的权限              
                                                                                        
void oops(char*, char*);                                                                
                                                                                        
int main(int argc, char* argv[]) {                                                      
    int in_fd, out_fd, n_chars;                                                         
    char buf[BUFSIZE];      //数据缓冲区                                                
                                                                                        
    if (argc != 3) {                                                                    
        fprintf(stderr, "usage: %s source destination!\n", *argv);                      
        exit(1);                                                                        
    }                                                                                   
                                                                                        
    //打开待复制文件                                                                    
    if ((in_fd = open(argv[1], O_RDONLY)) == -1)                                        
        oops("Can not open ", argv[1]);                                                 
                                                                                        
    //创建新文件                                                                        
    if ((out_fd = creat(argv[2], MODE)) == -1)                                          
        oops("Can not create ", argv[2]);                                               
                                                                                        
    //复制文件内容                                                                      
    while ((n_chars = read(in_fd, buf, BUFSIZE)) > 0)                                   
        if (write(out_fd, buf, n_chars) != n_chars)                                     
            oops("Write error to ", argv[2]);                                           
    if (n_chars == -1)                                                                  
        oops("Read error from ", argv[1]);                                              
                                                                                        
    if (close(in_fd) == -1 || close(out_fd) == -1)                                      
        oops("Close error!", "");                                                       
                                                                                        
    return 0;                                                                           
}                                                                                       
                                                                                        
                                                                                        
void oops(char* s1, char* s2) {                                                         
    fprintf(stderr, "Error: %s", s1);                                                   
    perror(s2);                                                                         
    exit(1);                                                                            
}                 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值