shm_open
shm_open — opens shared memory objects.
Syntax
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]](images/important.gif) | 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 create 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 To 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);