using memcpy(), how to do it *PROPERLY* ?

In some *nix book I found this example of copying files:

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>

main (int argc, char *argv[]) {

int fd_src, fd_dst, rc;
caddr_t addr_src, addr_dst;
struct stat filestat;

fd_src = open( argv[1], O_RDONLY );
printf( “Source %d.\n”, fd_src );

fd_dst = open( argv[2], O_RDWR | O_CREAT );

fstat( fd_src, &filestat );

lseek( fd_dst, filestat.st_size -1, SEEK_SET );
write( fd_dst, " ", 1 );

addr_src = mmap( (caddr_t)0, filestat.st_size,
PROT_READ, MAP_SHARED, fd_src, 0 );
addr_dst = mmap( (caddr_t)0, filestat.st_size,
PROT_READ | PROT_WRITE, MAP_SHARED, fd_src, 0 );

memcpy( addr_dst, addr_src, filestat.st_size );

close( fd_src );
close( fd_dst );
exit( 0 );
}


It does compile with WC v10.6B cleanly, but “memcpy” fails. What is
different with memory management in QNX relative to unix’es?

Tony.