shm_open

Gamma: Version 4.0
Prev |  | Next

# `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.

| 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);

## See Also

`mmap`, `shm_unlink`

Prev | Home | Next
`setenv` | Up | `shm_unlink`

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