Simple question about mmap() system call

Stanislav Sedov stas at 310.ru
Fri Jun 23 14:58:18 UTC 2006


On Fri, 23 Jun 2006 17:47:57 +0300 (EEST)
Dmitry Pryanishnikov <dmitry at atlantis.dp.ua> wrote:

> 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.
> 

munmap(2)?

-- 
Stanislav Sedov         MBSD labs, Inc.         <ssedov at mbsd.msk.ru>
Россия, Москва		http://mbsd.msk.ru

--------------------------------------------------------------------
If the facts don't fit the theory, change the facts.  -- A. Einstein
--------------------------------------------------------------------
PGP fingerprint:  F21E D6CC 5626 9609 6CE2  A385 2BF5 5993 EB26 9581
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20060623/207a15dc/attachment.pgp


More information about the freebsd-hackers mailing list