ultrix man page for mmap

Query: mmap

OS: ultrix

Section: 2

Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar

mmap(2) 							System Calls Manual							   mmap(2)

Name
       mmap - maps memory of a character device

Syntax
       #include <sys/types.h>
       #include <sys/mman.h>

       caddr_t mmap(addr, len, prot, flags, fd, off)
       caddr_t addr;
       size_t len;
       int prot;
       int flags;
       int fd;
       off_t off;

Arguments
       addr	 Specifies  the  address  space  of  the  calling  process where begins mapping the memory associated with the specified character
		 device.

       len	 Specifies the number of bytes to map.

       prot	 Specifies the protection flag for the mapping.  The protection flag is the bitwise inclusive OR of these  valid  protection  flag
		 bits defined in or

       flags	 Specifies the mapping flag.  The mapping flag is the bitwise inclusive OR of these valid flag mapping bits defined in or

       fd	 Specifies the file descriptor for the character device being mapped.

       off	 Specifies the offset in bytes into the character device's memory.

Description
       The  system call maps the memory of a character device (fd) starting at a specified offset (off) for a specified number of bytes (len) into
       the address space of the calling process.  The routine does not map into private data, stack, or text  segments.   This	routine  does  not
       replace any existing mappings.  All the mapped regions are inherited by a child process on a fork.

       When calling you need to:

       o    Align the offset

	    You must align the offset (off) on a page boundary as returned by the system call.

       o    Indicate the number of bytes to map

	    The  number  of  bytes to map (len) need not be a multiple of the page size as returned by However, will round the value of len to the
	    nearest multiple of the page size as returned by and perform the mapping over whole pages.

       o    Specify the protection for the mapping

	    You specify the protection for the mapping by ORing the prot argument with one or more of the constants or If you  specify	only  both
	    VAX and RISC architectures will grant read access.	If you specify only then both VAX and RISC architectures will grant read and write
	    access.

       o    Indicate the address at which the mapping occurs

	    The addr and flags arguments are used by to determine the actual address at which the mapping is done.  You specify the  mapping  flag
	    by ORing the flags argument with one or more of the constants or

	    Based on the values you specify for addr and flags, performs the mapping as follows:

       -	      If addr is equal to zero, selects the address at which the mapping is done.

       -	      If  addr	is  not  equal to zero and you specified the mapping is done at the address specified in addr.	You can obtain the
		      boundary on which addr must be aligned by calling the system call.

       -	      If addr is not equal to zero and you did not specify the mapping is done	at  the  address  rounded  down  to  the  boundary
		      returned by The value returned by is machine-dependent.

Restrictions
       You must observe the following restrictions when calling

       o    Maximum number of mapped regions for each process

	    The  shared  memory  functionality upon which is implemented requires that you not exceed the maximum number of shared memory segments
	    allowed for each process.  The default value is six shared memory segments for each process.  You can configure (in the system config-
	    uration file) the number of shared memory segments for each process by using the constant

       o    Maximum number of mapped regions on the system

	    The shared memory functionality imposes a limit on the maximum number of mapped regions on the system.  The default limit is 100, suf-
	    ficient to support a maximum configuration of all devices that can be mapped.  The	maximum  configuration	is  2*21  devices  (2  VME
	    adapters, 21 devices for each bus).

       o    A process mapping the same region of device memory

	    A  process cannot map the same region of device memory more than once into its address space.  This limitation is a result of the lack
	    of multiple attach capability for shared memory.  However, a single process can map different regions of device memory  simultaneously
	    into  its  address	space.	 Two regions of memory are identical only if they start at the same offset in device memory and are of the
	    same length.

       o    Use of the system call

	    The system call does not work on the addresses mapped by a call to The reason is that does not work for shared  memory  and  therefore
	    cannot be used to change protection for the address space mapped by

Return Value
       If  successful,	returns the address where the mapping was done.  Otherwise, it returns -1 and sets the errno argument to one of the errors
       listed in the Diagnostics section.

Diagnostics
       The call to fails if one or more of the following is true:

       [EBADF]	 The device, represented by the file descriptor fd, is not open.

       [EACCES]  The device, represented by the file descriptor fd, is not open for read operations and you specified the protection flag in prot.
		 Or, the device is not open for write operations and you specified the protection flag in prot.

       [ENXIO]	 Addresses in the range [ off, off + len ] are invalid for this device, represented by the file descriptor fd.

       [EINVAL]  You did not specify either or in the flags argument.

       [EINVAL]  You did not specify either or in the prot argument.

       [EINVAL]  The file descriptor, fd, is not a valid file descriptor for a character device.

       [ENODEV]  The file descriptor, fd, refers to a device that does not support the system call.

       [ENOMEM]  There is not enough room in the address space to perform the mapping.

See Also
       getpagesize(2), getsysinfo(2), mmapalignment(1), munmap(2)

																	   mmap(2)
Similar Topics in the Unix Linux Community
mapping drives