mmap

Gamma: Version 4.0
Prev |  | Next

# `mmap`

`mmap` -- implements the C `mmap` function call.

## Syntax

    mmap (size, prot_flags, share_flags, shm_file, offset)

## Arguments

`size`

  The size (in bytes) of the shared memory segment to map.

`prot_flags`

  Access capability flags.

`share_flags`

  Sharing flags.

`shm_file`

  A file descriptor as returned by shm_open.

`offset`

  An offset from the beginning of the shared memory area.

## Returns

A buffer which is mapped to the shared memory region, or nil on failure with errno set.

## Description

This function is currently only available in QNX 4. It implements the C `mmap` function call, returning a buffer which maps to the shared memory region. The `shm_open` function needs to be called before using this function.

The `prot_flags` specifies the access capability. Valid `prot_flags` are bitwise OR-ed combinations of:

- PROT_EXEC The region can be executed.

- PROT_NOCACHE Disable caching of the region (use for dual port RAM).

- PROT_NONE The region cannot be accessed.

- PROT_READ The region can be read.

- PROT_WRITE The region can be written.

The `share_flags` specify the handling of the memory region. Valid `share_flags` are bitwise OR-ed combinations of:

- MAP_PRIVATE Changes are private.

- MAP_SHARED Share changes.

Remember to require the "const/mman.lsp" file before using these constants.

Possible errors when using this function are:

- EACCES The shm_file is not open for the correct mode

- EAGAIN The mapping could not be locked in memory due to a lack of resources

- EBADF The passed shm_file is bad.

- EINVAL The `prot_flags` of `share_flags` argument is invalid

- ENODEV The shm_file arg refers to an argument for which mmap is meaningless

- ENOMEM The mapping could not be locked because it would require more space than the system is able to supply

- ENOSYS The function mmap is not supported by this implementation

- ENOTSUP MAP_PRIVATE was specified but the implementation does not support this functionality

- ENXIO The offset or size arguments are invalid.

## Example

        //This code maps the first 1000 bytes from video
        //memory (0xA0000) into a buffer named buf.

        require_lisp("const/filesys");
        require_lisp("const/mman");
        fd = shm_open("Physical",O_RDONLY, 0o777);
        buf = mmap(1000, PROT_READ , MAP_SHARED, fd, 0xA0000);

## See Also

`shm_open`

Prev | Home | Next
`inp`, `inpw` | Up | `outp`, `outpw`

Copyright 1995-2002 by Cogent Real-Time Systems, Inc.