Beej's Guide to Unix Interprocess Communication
Version 0.9.3 (14-May-1997)
Intro
You know what's easy? fork() is easy. You can fork off new
processes all day and have them deal with individual chunks of a problem
in parallel. Of course, its easiest if the processes don't have to
communicate with one another while they're running and can just sit
there doing their own thing.
However, when you start fork()'ing processes, you immediately
start to think of the neat multi-user things you could do if the
processes could talk to each other easily. So you try making a global
array and then fork()'ing to see if it is shared. (That is,
see if both the child and parent process use the same array.) Soon, of
course, you find that the child process has its own copy of the array
and the parent is oblivious to whatever changes the child makes to it.
How do you get these guys to talk to one another, share data structures,
and be generally amicable? This document discusses several methods of
Interprocess Communication (IPC) that can accomplish this, some
of which are better suited to certain tasks than others.
Audience
If you know C or C++ and are pretty good using a Unix environment (or
other POSIXey environment that supports these system calls) these
documents are for you. If you aren't that good, well, don't sweat
it--you'll be able to figure it out. I make the assumption, however,
that you have a fair smattering of C programming experience.
As with Beej's
Guide to Network Programming Using Internet Sockets, these documents
are meant to springboard the aforementioned user into the realm of IPC
by delivering a concise overview of various IPC techniques. This is not
the definitive set of documents that cover this subject, by any means.
Like I said, it is designed to simply give you a foothold in this, the
exciting world of IPC.
Platform and Compiler
The examples in this document were compiled under Linux using
gcc. They have also been known to compile under HPUX 10.10
using cc -Ae. The programs are fairly ANSI compliant, and
should compile on just about any platform for which a good ANSI C
compiler is available.
Specific Documents:
Copyright © 1997 by Brian "Beej" Hall. This guide may be
reprinted in any medium provided that its content is not altered, it is
presented in its entirety, and this copyright notice remains
intact. Contact beej@ecst.csuchico.edu for
more information.