利用mmap()写一个拷贝文件的程序

来源:互联网 发布:java easyui 编辑:程序博客网 时间:2024/05/22 14:16
#include <unistd.h>#include <assert.h>#include <sys/mman.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <stdio.h>#include <stdlib.h>void mmapcopy(int src_fd,size_t src_len,int dst_fd);int main(int argc,char* argv[]){        if(argc!=3)        {                       printf("Usage:%s<src_file><dst_file>\n",argv[0]);                return -1;        }        int src_fd;        int dst_fd;        if((src_fd=open(argv[1],O_RDONLY))<0)        {                       printf("file1 open failed!\n");                return -1;        }        if((dst_fd=open(argv[2],O_RDWR | O_CREAT | O_TRUNC,S_IRWXU ))<0)        {                printf("file2 open failed! \n");                return -1;        }        struct stat stat;        //获取文件信息        fstat(src_fd,&stat);        //设置文件大小        truncate(argv[2],stat.st_size);        mmapcopy(src_fd,stat.st_size,dst_fd);        close(src_fd);        close(dst_fd);        return 0;}void mmapcopy(int src_fd,size_t src_len,int dst_fd){        void* src_ptr,*dst_ptr;        src_ptr=mmap(NULL,src_len,PROT_READ,MAP_PRIVATE,src_fd,0);        dst_ptr=mmap(NULL,src_len,PROT_READ | PROT_WRITE,MAP_SHARED,dst_fd,0);        if(dst_ptr==MAP_FAILED)        {                printf("mmap error:%s\n",strerror(errno));                return;        }        //获取文件信息        fstat(src_fd,&stat);        //设置文件大小        truncate(argv[2],stat.st_size);        mmapcopy(src_fd,stat.st_size,dst_fd);        close(src_fd);        close(dst_fd);        return 0;}void mmapcopy(int src_fd,size_t src_len,int dst_fd){               void* src_ptr,*dst_ptr;        src_ptr=mmap(NULL,src_len,PROT_READ,MAP_PRIVATE,src_fd,0);        dst_ptr=mmap(NULL,src_len,PROT_READ | PROT_WRITE,MAP_SHARED,dst_fd,0);        if(dst_ptr==MAP_FAILED)        {                       printf("mmap error:%s\n",strerror(errno));                return;        }        memcpy(dst_ptr,src_ptr,src_len);        munmap(src_ptr,src_len);        munmap(dst_ptr,src_len);}

结果
这里写图片描述

原创粉丝点击