shm_open

shm_open — opens shared memory objects.

Synopsis

shm_open (share_name, open_flags, create_mode, size?)

		

Arguments

share_name

The name of the shared memory object.

open_flags

Open control flags.

create_mode

Creation mode.

size

The size of the shared object in bytes.

Returns

A handle to the shared memory object, or nil on failure.

Description

This function is a wrapper for the C function shm_open. It is currently only available in QNX 4.

The name of the shared memory object is usually a name found under the /dev/shmem directory. Direct shared memory access to devices is acheived through a shm_open call to the existing Physical shared memory.

[Important]

If you are accessing the existing Physical shared memory region (/dev/shmem/Physical) DO NOT use the size argument, as you may inadvertantly resize this shared memory. The size argument is added as a convenience, and can be used to specify the size of a newly created object.

Valid open-flags are OR-ed combinations of:

  • O_RDONLY  Open for read-only

  • O_RDWR  Open for read and write access

  • O_CREAT  creates a new shared memory segment with access privledges governed by the create_mode parameter

  • O_EXCL  Exclusive mode. If O_EXCL and O_CREAT are set then shm_open will fail if the shared memory segment exists.

  • O_TRUNC  If the shared memory object exists, and it is successfully opened O_RDWR, the object is truncated to zero length and the mode and owner are unchanged.

The creation mode is usually an octal number in the range 0o000 - 0o777 defining the access privledges for the shared memory object. Require the 'const/filesys' file to load constants to make this arg easier

Possible errno values are:

  • EACCESS  Permission to create the shared memory object denied

  • EEXIST  O_CREAT and O_EXCL are set and the named shared memory object already exists

  • EINTR  The function call was interrupted by a signal

  • EMFILE  Too many file descriptors in use by this process

  • ENAMETOOLONG  The lengthof the name arg is too long

  • ENFILE  Too many shared memory objects are currently open in the system

  • ENOENT  O_CREAT is not set and the named shared memory object does not exist, or O_CREAT is set and either the name prefix does not exist or the name arg is an empty string

  • ENOSPC  Not enough space for the creation of the new shared memory object

  • ENOSYS  This function is not supported by this implementation.

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_unlink