Beej's Guide to Unix IPC

Brian "Beej Jorgensen" Hall
beej@beej.us

Version 1.0.1
July 25, 2007

Copyright © 2007 Brian "Beej Jorgensen" Hall


Contents


1. Intro
1.1. Audience
1.2. Platform and Compiler
1.3. Official Homepage
1.4. Email Policy
1.5. Mirroring
1.6. Note for Translators
1.7. Copyright and Distribution

2. A fork() Primer
2.1. "Seek ye the Gorge of Eternal Peril"
2.2. "I'm mentally prepared! Give me The Button!"
2.3. Summary

3. Signals
3.1. You can't SIGKILL the President!
3.2. Everything you know is wrong
3.3. Some signals to make you popular

4. Pipes
4.1. "These pipes are clean!"
4.2. fork() and pipe()—you have the power!
4.3. The search for Pipe as we know it
4.4. Summary

5. FIFOs
5.1. A New FIFO is Born
5.2. Producers and Consumers
5.3. O_NDELAY! I'm UNSTOPPABLE!
5.4. Multiple Writers—How do I multiplex all these?
5.5. Concluding Notes

6. File Locking
6.1. Setting a lock
6.2. Clearing a lock
6.3. A demo program
6.4. Summary

7. Message Queues
7.1. Where's my queue?
7.2. "Are you the Key Master?"
7.3. Sending to the queue
7.4. Receiving from the queue
7.5. Destroying a message queue
7.6. Sample programs, anyone?
7.7. Summary

8. Semaphores
8.1. Grabbing some semaphores
8.2. Controlling your semaphores with semctl()
8.3. semop(): Atomic power!
8.4. Destroying a semaphore
8.5. Sample programs
8.6. Summary

9. Shared Memory Segments
9.1. Creating the segment and connecting
9.2. Attach me—getting a pointer to the segment
9.3. Reading and Writing
9.4. Detaching from and deleting segments
9.5. Concurrency
9.6. Sample code

10. Memory Mapped Files
10.1. Mapmaker
10.2. Unmapping the file
10.3. Concurrency, again?!
10.4. A simple sample
10.5. Summary

11. Unix Sockets
11.1. Overview
11.2. What to do to be a Server
11.3. What to do to be a client
11.4. socketpair()—quick full-duplex pipes

12. More IPC Resources
12.1. Books
12.2. Other online documentation
12.3. Linux man pages