基于UNIX的操作系统内核——BSD管道等

来源:互联网 发布:linux find mtime rm 编辑:程序博客网 时间:2024/05/22 00:45

BSD管道
 
        管道通常建立在父进程建立子进程时。管道中的数据被缓冲并以先进先出(FIFO)的方式读取。您可以使用pipe函数建立父进程和子进程之间的匿名管道,它被定义在/usr/include/unistd.h。这个函数是建立管道的最简便的方法,它将父子进程关联起来。
 
        命名管道可以建立任意两个进程之间的通讯。一个命名管道由一个被叫做“FIFO特殊文件”的系统文件表示。一个命名管道的名字必须是对放送方和接收方都可知的。
 
        注意,您要合理地取命名管道的名字,以防止不必要的名字冲突。
 
        管道是进程通讯的有效方式。但是一般而言,流较管道效率更高。CFStream支持Run Loop,使得它支持进程之间的多重连接,而不仅仅是如管道一般一对一的。
 
        需要CFStream的更多信息,请看CFNetwork Program-ming Guide(http://developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html)。
 
 

 

共享内存
 
        共享内存是一段内存区域,它被一个进程创建并可以被其它进程读取或写入。有很多建立共享内存的方法,一种方法是使用/usr/include/sys/shm.h头文件中的shm_open,shm_unlink,和mmap函数。共享内存的读取由POSIX信号量实现,它实现了一种锁定(locking)的机制保持资源的一致性。相比其它进程通讯方法,共享内存具有如下优势:
 
 • 任何进程具有足够权限都可以访问共享内存区域
 • 数据被进程直接读取,而不是被拷贝
 • 性能佳
 
        共享内存的缺点在于它比较脆弱。当一个数据结构损坏时,所有的进程都会受到影响。从安全性上考虑,共享内存也仅适合于单个用户会话的情况。所以,共享内存仅仅适合于保存源(raw)数据,如像素或音频,作为一种比其它通讯方式更为方便的手段。
 
        要更多的了解shm_open,shm_unlink和mmap函数,请看shm_open,shm_unlink和mmap的man page。
 
 
Apple Event
 
        Apple Event是一种从语义上较为高层的事件,它可以向应用程序本身发送,向远程计算机发送或向本地计算机的其它应用程序发送。Apple Event是Mac OS X上应用程序之间通讯和实现脚本(scripting)的主要手段。应用程序可以使用Apple Event向其它程序请求服务,也可以在接受Apple Event时通过Apple Event处理器(handler)提供服务。
 
        Apple Event有一个定义良好的数据结构,支持可扩展的,层次化的数据类型。为了让脚本编写人员和其它编程人员更方便的接受这些信息,你的应用程序应该支持Apple定义的标准的Apple Event。如果你要提供更多的功能,则可以自定义添加。
 
        Apple Event是Application Services支援框架(umbrella framework)。更多信息,请看Apple Events Programming Guide。关于如何建立,发送和接受Apple Event,请看Apple Event Manager(http://developer.apple.com/documentation/Carbon/Reference/Apple_Event_Manager/index.html)。
 
 
Distributed Notification
 
        Distributed Notification是一种进程向消息中心(notification center)投递的消息,然后由消息中心投递到其它需要这种消息的所有进程。一台计算机有一个消息中心,所有进程都可以都可以向其投递消息,然后由消息中心派发。这种消息包含有表示投递者的ID和一些附加的重要信息。Distributed Notification的机制由Core Foundation的CFNotificationCenter类和Cocoa的NSDistributedNotificationCenter类实现。
 
        Distributed Notification适合于发送简单类型的消息。比如传递一个硬件的状态信息,包括网络接口或打印机等等。然而,你不应该使用它将一些特别重要的信息用这种方式传送。Mac OS X努力将所有消息投递到适合的接受者,但这一点并不保证。
 
        Distributed Notification的接受者无法回复消息。也不能限制一部分进程不能接受一些特定的消息,所有接受者在消息中心注册过的消息都会被接受者接受。Distributed Notifi-cation使用字符串制定一组唯一的注册码以区别不同类型的消息,所以有可能会存在命名空间冲突。
 
        关于Core Foundation中Distributed Notification的更多消息,请看CFNotificationCenter Reference。关于Cocoa对Distributed Notification的支持,请看Notification Program-ming Topics for Cocoa(http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html)。