Go to main content

Oracle® Solaris 11.3 Programming Interfaces Guide

Exit Print View

Updated: April 2019
 
 

POSIX Interprocess Communication

    POSIX interprocess communication (IPC) is a variation of System V interprocess communication. Like System V objects, POSIX IPC objects have read and write, but not execute, permissions for the owner, the owner's group, and for others. There is no way for the owner of a POSIX IPC object to assign a different owner. POSIX IPC includes the following features:

  • Messages allow processes to send formatted data streams to arbitrary processes.

  • Semaphores allow processes to synchronize execution.

  • Shared memory allows processes to share parts of their virtual address space.

Unlike the System V IPC interfaces, the POSIX IPC interfaces are all multithread safe.

POSIX Messages

The POSIX message queue interfaces are listed in the following table.

Table 7  POSIX Message Queue Interfaces
Interface Name
Purpose
mq_open()
Connects to and optionally creates a named message queue
mq_close()
Ends the connection to an open message queue
mq_unlink()
Ends the connection to an open message queue and causes the queue to be removed when the last process closes it
mq_send()
Places a message in the queue
mq_receive()
Receives (removes) the oldest, highest priority message from the queue
mq_notify()
Notifies a process or thread that a message is available in the queue
mq_setattr()
Set or get message queue attributes

POSIX Semaphores

POSIX semaphores are much lighter weight than are System V semaphores. A POSIX semaphore structure defines a single semaphore, not an array of up to 25 semaphores.

The POSIX semaphore interfaces are shown here:

sem_open()

Connects to, and optionally creates, a named semaphore

sem_init()

Initializes a semaphore structure (internal to the calling program, not a named semaphore)

sem_close()

Ends the connection to an open semaphore

sem_unlink()

Ends the connection to an open semaphore and causes the semaphore to be removed when the last process closes it

sem_destroy()

Initializes a semaphore structure (internal to the calling program, not a named semaphore)

sem_getvalue()

Copies the value of the semaphore into the specified integer

sem_wait()

Blocks while the semaphore is held by other processes or returns an error if the semaphore is held by another process

POSIX Shared Memory

POSIX shared memory is actually a variation of mapped memory (see Creating and Using Mappings). The major differences are:

  • You use shm_open() to open the shared memory object instead of calling open().

  • You use shm_unlink() to close and delete the object instead of calling close() which does not remove the object.

The options in shm_open() substantially fewer than the number of options provided in open().