> The following program makes a call to mmap() which fails under
> Linux 2.0.27 2.0.29 and Digital Unix 4.0B. I have not tested it
> under other operating systems. If the file descriptor is opened
> with O_RDWR the mmap() call works. Is this a bug or a feature?
I think it behaves correctly. Also an Ultrix and IRIX Version of this
code fails. The problem is more likely an old Linux man page which
specifies
ERRORS
For mmap:
EACCES The flag PROT_READ was specified as part of the
prot parameter and fd was not open for reading.
The flags PROT_WRITE, MAP_SHARED and MAP_WRITE
were specified as part of the flags and prot
parameters and fd was not open for writing.
or another later version of the man page:
EACCES MAP_PRIVATE was asked, but fd is not open for read
ing. Or MAP_SHARED was asked and PROT_WRITE is set,
fd is not open for writing.
Instead mmaped files are always required to be open for reading
(compare mm/mmap.c - do_mmap()) - the code is more correct than the
man page...
OSF:
[EACCES] The file referred to by filedes is not open for read access, or
the file is not open for write access and PROT_WRITE was set for
a MAP_SHARED mapping operation.
IRIX:
EACCES fd is not open for read, regardless of the protection specified,
or fd is not open for write and PROT_WRITE was specified for a
MAP_SHARED type mapping.
HPUX:
[EACCESS] The file referred to by fildes is not open for
read access, or the file is not open for write
access and PROT_WRITE was set for a MAP_SHARED
mapping operation, or PROT_EXECUTE was set for a
MAP_SHARED mapping operation and the underlying
file does not have execute permission.
Wolfgang
-- _/ _/ _/ _/ _/_/_/ . Wolfgang Wander _/ _/ _/ _/ _/ . MIT-LNS Email: wwc@ralph2.mit.edu _/_/_/ _/_/_/ _/ . 77 Mass Ave 24-006 Tel: (617) 253 5222 - Fax: 258 6591 _/_/_/ _/_/_/ _/_/_/ . Cambridge, MA 02139-4307