#include #include #include #include #include #include #include #include #define BUFSIZE 1024 static inline double tstamp(void) { struct timespec tv; clock_gettime(CLOCK_REALTIME, &tv); return tv.tv_sec + tv.tv_nsec * 1.0e-9; } int main(int argc, char *argv[]) { //char buf[BUFSIZE]; char * bufin = NULL, * bufout = NULL; int fin, fout; double start, end; size_t filesize = 0; assert(argc == 3); start = tstamp(); fin = open(argv[1],O_RDONLY); assert(fin >=0); fout = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600); assert(fout >=0); filesize = lseek(fin,0,SEEK_END); ftruncate (fout,filesize); bufin = mmap(NULL,filesize,PROT_READ,MAP_PRIVATE,fin,0); assert(bufin != (void*)-1); bufout = mmap(NULL,filesize,PROT_WRITE,MAP_SHARED,fout,0); assert(bufout != (void*)-1); memcpy(bufout,bufin,filesize); //munmap(bufin,filesize); //munmap(bufout,filesize); //ssize_t nb_read = read(fin,buf,sizeof(buf)); close(fin); close(fout); end = tstamp(); printf("time = %.3lf\n",end - start); return 0; }