简介
你知道什么很简单? fork() 很简单。 你可以不停的产生新进程,让它们并行地处理问题的各个不同的部分。当然,如果这些 进程运行时互相不通讯并且只是在哪儿做自己的事情是最简单的了。
不过,当你开始 fork() 进程的时候, 你马上就会开始考虑如果进程间能够互相通讯的话,就可以干多用户的事情。因 此,你定义了一个全局的数组,然后 fork() ,看看它是否被共享。(也就是说,看看 子进程和父进程是否使用同一数组。)很快,你发现子进程拥有自己的数组的拷贝,在子进程对它做了任何修改的时候父进程却一无所 知。
怎样你才能使这些家伙互相交谈,共享数据结构,并友善相处呢?本文讨论了可以达到这个要求的几种 进程间通讯(IPC)的方法,对某一特定的要求其中一种方法可能更适合。
--------------------------------------------------------------------------------
广大的读者
如果你懂得 C 或者 C++ ,并且能够非常熟练的使用 Unix(或者其他的支持这些系统调用的 POSIX 兼容的环境),本文正是为你所写的。如果不能达到这些要求,不要紧张——你能够理解它。我假定你有一些 C 程序设计的经验。
和 Beej's Guide to Network Programming Using Internet Sockets 一起,这些文档是作为上述用户通过对几种不同的 IPC 技术的大概了解而进入 IPC 领域的出发点, 无论如何,它们并不是相关主题的权威性文档。正如我所说,它被设计得很精悍,给你在令人激动的 IPC 世界里一个立足点。
--------------------------------------------------------------------------------
平台和编译器
本文的例子在 Linux 上使用 gcc 编译,也可以在 HPUX 10.10 上使用 cc -Ae编译。这些程序基本上是 ANSI 兼容的,应该能够在任何提供优良 ANSI C 编译器的平台上编译。
--------------------------------------------------------------------------------
详细文档:
fork() 基础
软中断(Signals)
管道(Pipes)
FIFOs (Named Pipes)
文件加锁(File locking)
System V IPC (工作于大部分 Unix 类的平台,总之……)
消息队列(Message Queues)
信号灯(Semaphores)
共享内存(Shared Memory)
内存映射文件(Memory Mapped Files)
Unix 套接字(Sockets)
更多的资源
--------------------------------------------------------------------------------
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.