Simple question about mmap() system call

Dmitry Pryanishnikov dmitry at atlantis.dp.ua
Fri Jun 23 14:48:06 UTC 2006


Hello!

  I'm writing an utility that should examine some bytes of a large file
and modify them - that't all. I've decided to mmap() the file:

     void *diskp;

     if ((fd=open(argv[1], O_RDWR)) == -1)
         err(EX_NOINPUT, "Can't open %s for readind and writing", argv[1]);

     if ((diskp=mmap(NULL, 512,
         PROT_READ | PROT_WRITE, 0, fd, 0)) == MAP_FAILED)
             err(EX_IOERR, "Can't mmap() file");

     printf("<%c>\n",* (char *)diskp);
     * (char *)diskp = '!';

     if (msync(diskp, 0, MS_SYNC) || close(fd))
         err(EX_IOERR, "Error closing file");

All proceeds w/o errors with the sample (2 bytes long) file, printf()
shows actual first byte of my file. But modification doesn't get written back 
to the disk, file contents are unchanged after execution of my code. I'm sure 
I'm overlooking something very basic and stupid, but can't find what exactly.

Sincerely, Dmitry
-- 
Atlantis ISP, System Administrator
e-mail:  dmitry at atlantis.dp.ua
nic-hdl: LYNX-RIPE


More information about the freebsd-hackers mailing list