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