Advanced UNIX IPC Facilities

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 11

Advanced UNIX IPC Facilities

After Haviland, et al.s book

Introduction and Basic Concepts


UNIX offers a variety of advanced IPC mechanisms This makes UNIX an extremely rich system in the IPC area Allows developer to use a variety of approaches when programming a system made up of cooperating tasks

Categories of advanced IPC


Message passing Semaphores Shared memory

IPC facility keys


UNIX has made the 3 categories of IPC as similar as possible for programming convenience The most (?) important similarity is the IPC key Keys are numbers used to identify an IPC object on a UNIX system Much like a file name being used to identify files Key allows IPC object to be shared by several processes

Difference between keys and file names


Keys are not file names and carry less meaning Actual key type is determined by implementation, and defined by key_t in <sys/types.h> UNIX uses a simple library funciton that maps a files pathname to a key
Routine is called ftok( )

IPC get operation


With the get operation, a program uses a key to
Create an IPC, or, Gain access to an existing one
Mqid = msgget((key_t)0100, 0644|IPC_CREAT|IPC_EXCL); For semaphores: semget For shared mem: shmget

Msg queue key Non-neg id returned if successful

Other IPC Operations


Control operations
Get status information Set control values Actual calls are msgctl, semctl, shmctl

More specific operations to perform various functions


Do interesting work Called IPC operations For example, for message queues we have:
Msgsend msgrcv

Status data structures


When an IPC object is created, the system also creates an IPC facility status structure This contains any administrative info assoc with object There is one type of status structure for messages, semaphores and shared mem However all 3 contain a common permission structure, ipc_perm

Message passing
A message is basically a sequence of characters of bytes, not necessarily nullterminated One process creates a message queue using msgget One a queue is established, a process with the right permissions can put messages into it with msgsnd Another process can then read this message with msgrcv

Form of msgget
#include <sys/msg.h> int msgget(key_t key, int permflags);

Permflags
Determines the exact action perform by msgget

Two constants are relevant here, defined in <sys/ipc.h>


Can be used alone or ORed together IPC_CREAT Tells msgget to create a message queue for the value key if one doesn't exist Message queue will not be overwritten if it already exists If not set, then msgget returns id of existing msgqueue, if exists IPC_EXCL If this and IPC_CREAT are both set, then only intend to create new msgqueue Return -1 if already exists

You might also like