| Contents |

14 More IPC Resources

14.1 Books

Here are some books that describe some of the procedures I’ve discussed in this guide, as well as Unix details in specific:

Bach, Maurice J. The Design of the UNIX Operating System. Published by Prentice-Hall, 1986. ISBN 013201799764.

W. Richard Stevens. Unix Network Programming, volumes 1-2. Published by Prentice Hall. ISBNs for volumes 1-2: 013141155165, 013081081966.

W. Richard Stevens. Advanced Programming in the UNIX Environment. Published by Addison Wesley. ISBN 020143307967.

14.2 Other online documentation

UNIX Network Programming Volume 2 home page68—includes source code from Stevens’ superfine book.

The Linux Programmer’s Guide69—in-depth section on IPC.

UNIX System Calls and Subroutines using C70—contains modest IPC information.

The Linux Kernel71—how the Linux kernel implements IPC.

14.3 Linux man pages

There are Linux manual pages. If you run another flavor of Unix, please look at your own man pages, as these might not work on your system.


  1. https://beej.us/guide/bgnet↩︎

  2. https://beej.us/guide/bgipc↩︎

  3. https://beej.us/guide/bgipc/source/examples/fork1.c↩︎

  4. Fun fact: when you hit CTRL-Z in the terminal while you’re running a program in the foreground, it sends a SIGSTOP to that process and the shell reports that it is stopped or suspended. If you then type fg, it’ll bring that process back to the foreground and send it SIGCONT to keep running where it left off.↩︎

  5. https://beej.us/guide/bgipc/source/examples/sigint.c↩︎

  6. https://en.wikipedia.org/wiki/Reentrancy_(computing)↩︎

  7. https://beej.us/guide/bgipc/source/examples/sigcount.c↩︎

  8. https://beej.us/guide/bgipc/source/examples/sigstrtok.c↩︎

  9. And it uses write() because printf() is not reentrant!↩︎

  10. https://beej.us/guide/bgipc/source/examples/sigusr.c↩︎

  11. https://man.archlinux.org/man/sigaction.2↩︎

  12. https://man.archlinux.org/man/sigwait.3↩︎

  13. https://man.archlinux.org/man/sigwaitinfo.2↩︎

  14. https://man.archlinux.org/man/sigtimedwait.2↩︎

  15. https://man.archlinux.org/man/sigsuspend.2↩︎

  16. https://man.archlinux.org/man/sigpending.2↩︎

  17. https://man.archlinux.org/man/kill.2↩︎

  18. https://man.archlinux.org/man/raise.3↩︎

  19. https://man.archlinux.org/man/sigqueue.3↩︎

  20. https://man.archlinux.org/man/sigemptyset.3↩︎

  21. https://man.archlinux.org/man/sigfillset.3↩︎

  22. https://man.archlinux.org/man/sigaddset.3↩︎

  23. https://man.archlinux.org/man/sigdelset.3↩︎

  24. https://man.archlinux.org/man/sigismember.3↩︎

  25. https://man.archlinux.org/man/sigprocmask.2↩︎

  26. https://man.archlinux.org/man/sigaltstack.2↩︎

  27. https://man.archlinux.org/man/siginterrupt.3↩︎

  28. https://man.archlinux.org/man/sigsetjmp.3↩︎

  29. https://man.archlinux.org/man/siglongjmp.3↩︎

  30. https://man.archlinux.org/man/signal.2↩︎

  31. You can override this with SA_NODEFER in your sa_flags, but that’s a sure path to madness.↩︎

  32. If you’re using POSIX threads, use the equivalent pthread_sigmask(), instead, to do this on a per-thread basis.↩︎

  33. https://beej.us/guide/bgipc/source/examples/sigblock.c↩︎

  34. https://beej.us/guide/bgnet/↩︎

  35. https://beej.us/guide/bgnet/html/split/slightly-advanced-techniques.html#poll↩︎

  36. https://beej.us/guide/bgnet/html/split/slightly-advanced-techniques.html#select↩︎

  37. https://beej.us/guide/bgipc/source/examples/pipesig.c↩︎

  38. https://beej.us/guide/bgipc/source/examples/pselect.c↩︎

  39. https://beej.us/guide/bgipc/source/examples/pipe1.c↩︎

  40. https://beej.us/guide/bgipc/source/examples/pipe2.c↩︎

  41. https://beej.us/guide/bgipc/source/examples/pipe3.c↩︎

  42. https://beej.us/guide/bgipc/source/examples/speak.c↩︎

  43. https://beej.us/guide/bgipc/source/examples/tick.c↩︎

  44. POSIX says PIPE_BUF will be at least 512 bytes. So that’s your portable safe zone.↩︎

  45. https://beej.us/guide/bgipc/source/examples/lockdemo.c↩︎

  46. https://en.wikipedia.org/wiki/POSIX↩︎

  47. https://beej.us/guide/bgipc/source/examples/kirk.c↩︎

  48. https://beej.us/guide/bgipc/source/examples/spock.c↩︎

  49. https://beej.us/guide/bgipc/source/examples/semdemo.c↩︎

  50. https://beej.us/guide/bgipc/source/examples/semdemo.c↩︎

  51. https://beej.us/guide/bgipc/source/examples/semrm.c↩︎

  52. Or whatever the current addictive FPS game is these days.↩︎

  53. https://en.wikipedia.org/wiki/Concurrency↩︎

  54. https://beej.us/guide/bgipc/source/examples/shmdemo.c↩︎

  55. https://beej.us/guide/bgipc/source/examples/mmapdemo.c↩︎

  56. https://beej.us/guide/bgipc/source/examples/mmap_anon.c↩︎

  57. https://beej.us/guide/bgnet↩︎

  58. https://beej.us/guide/bgnet↩︎

  59. https://beej.us/guide/bgnet↩︎

  60. https://man.archlinux.org/man/shutdown.2↩︎

  61. https://beej.us/guide/bgipc/source/examples/echos.c↩︎

  62. https://beej.us/guide/bgipc/source/examples/echoc.c↩︎

  63. https://beej.us/guide/bgipc/source/examples/spair.c↩︎

  64. https://beej.us/guide/url/unixdesign↩︎

  65. https://beej.us/guide/url/unixnet1↩︎

  66. https://beej.us/guide/url/unixnet2↩︎

  67. https://beej.us/guide/url/advunix↩︎

  68. http://www.kohala.com/start/unpv22e/unpv22e.html↩︎

  69. http://tldp.org/LDP/lpg/node7.html↩︎

  70. https://users.cs.cf.ac.uk/Dave.Marshall/C/↩︎

  71. https://tldp.org/LDP/tlk/ipc/ipc.html↩︎

  72. https://man.archlinux.org/man/accept.2↩︎

  73. https://man.archlinux.org/man/bind.2↩︎

  74. https://man.archlinux.org/man/connect.2↩︎

  75. https://man.archlinux.org/man/dup.2↩︎

  76. https://man.archlinux.org/man/exec.2↩︎

  77. https://man.archlinux.org/man/exit.2↩︎

  78. https://man.archlinux.org/man/fcntl.2↩︎

  79. https://man.archlinux.org/man/fileno.3↩︎

  80. https://man.archlinux.org/man/fork.2↩︎

  81. https://man.archlinux.org/man/ftok.3↩︎

  82. https://man.archlinux.org/man/getpagesize.2↩︎

  83. https://man.archlinux.org/man/ipcrm.8↩︎

  84. https://man.archlinux.org/man/ipcs.8↩︎

  85. https://man.archlinux.org/man/kill.1↩︎

  86. https://man.archlinux.org/man/kill.2↩︎

  87. https://man.archlinux.org/man/listen.2↩︎

  88. https://man.archlinux.org/man/lockf.2↩︎

  89. https://man.archlinux.org/man/lseek.2↩︎

  90. https://man.archlinux.org/man/mknod.1↩︎

  91. https://man.archlinux.org/man/mknod.2↩︎

  92. https://man.archlinux.org/man/mmap.2↩︎

  93. https://man.archlinux.org/man/msgctl.2↩︎

  94. https://man.archlinux.org/man/msgget.2↩︎

  95. https://man.archlinux.org/man/msgsnd.2↩︎

  96. https://man.archlinux.org/man/munmap.2↩︎

  97. https://man.archlinux.org/man/open.2↩︎

  98. https://man.archlinux.org/man/pipe.2↩︎

  99. https://man.archlinux.org/man/ps.1↩︎

  100. https://man.archlinux.org/man/raise.3↩︎

  101. https://man.archlinux.org/man/read.2↩︎

  102. https://man.archlinux.org/man/recv.2↩︎

  103. https://man.archlinux.org/man/semctl.2↩︎

  104. https://man.archlinux.org/man/semget.2↩︎

  105. https://man.archlinux.org/man/semop.2↩︎

  106. https://man.archlinux.org/man/send.2↩︎

  107. https://man.archlinux.org/man/shmat.2↩︎

  108. https://man.archlinux.org/man/shmctl.2↩︎

  109. https://man.archlinux.org/man/shmdt.2↩︎

  110. https://man.archlinux.org/man/shmget.2↩︎

  111. https://man.archlinux.org/man/sigaction.2↩︎

  112. https://man.archlinux.org/man/signal.2↩︎

  113. https://man.archlinux.org/man/signal.7↩︎

  114. https://man.archlinux.org/man/sigpending.2↩︎

  115. https://man.archlinux.org/man/sigprocmask.2↩︎

  116. https://man.archlinux.org/man/sigsetopts.2↩︎

  117. https://man.archlinux.org/man/sigsuspend.2↩︎

  118. https://man.archlinux.org/man/socket.2↩︎

  119. https://man.archlinux.org/man/socketpair.2↩︎

  120. https://man.archlinux.org/man/stat.2↩︎

  121. https://man.archlinux.org/man/wait.2↩︎

  122. https://man.archlinux.org/man/waitpid.2↩︎

  123. https://man.archlinux.org/man/write.2↩︎


| Contents |