基于UNIX的操作系统内核——IPC和Notification机制等

IPC和Notification机制
 
 
        Mac OS X支持进程之间的通讯(interprocess communi-cation)和消息传递的技术。下面逐一介绍:
 
 FSEvents API
 
 
        FSEvents应用程序接口自Mac OS X10.5引入。它的作用是,当Mac OS X的文件系统发生变化时,它负责通知(notify)注册FSEvent的应用程序。你可以使用这套API监视目录结构的任何改变,如文件和目录的创建,修改删除等等。虽然BSD的kqueue技术提供了相似的功能,但FSEvent使用更为简单,它可以方便地同时监视多个目录。更确切的说,你可以监视一个目录的继承体系,当这个目录或它的任意一个子目录发生变化时,你都可以接受到通知文件系统消息效率极高,可以在短的时间内发出多个事件,并将相关事件结合。
 
        FSEvents不像kqueue那样,可以了解单个文件的变化情况。你不能够用它检测单个文件的变化,如杀毒软件所做的一样。FSEvent的用途有可能是:当文件系统发生变化时应用程序将数据备份,或是一个数据文件有可能被其它的应用程序编辑。
 
        更多关于FSEvent API的信息,请看File System Events Programming Guide(http://developer.apple.com/documentation/Darwin/Conceptual/FSEvents_ProgGuide/index.html)。
 
 
 
 
Kernel Queue和Kernel Events
 
        Kernel Queue(也叫kqueue)和kernel events(也叫kevents)是捕获内核级别事件重要和有力的手段。你可以用它检测文件系统的变化,像FSEvent一样;你也可以检测套接字,进程和其它系统底层资源的变化。比如,你可以检测一个进程是不是正在退出或是否在执行fork或exec函数
 
        Kernel Queue和Kernel Events工作在操作系统的FreeBSD层上,具体信息,请看kqueue和kevent的man pages。
 
 
 
 
BSD Notification
 
 
        BSD的Notification机制由Mac OS X 10.3引入,它是系统级别的Notification API,被定义在/usr/include/notify.h头文件下。BSD Notification相比Core Foundation的消息机制的优点如下:
 
 
 • BSD Notification可以用许多方法接受到,如Mach Port,信号和文件描述符。
 • BSD比其它通知机制更轻便和高效。
 • BSD机制可以在多个消息同时接收时结合。
 
 
        任何类型的应用程序都可支持BSD消息通知机制,包括Carbon和Cocoa的应用程序。更多信息,请看Mac OS X Notification Over-view(http://developer.apple.com/documentation/Darwin/Conceptual/MacOSXNotifcationOv/Introduction/chapter_1_section_1.html)或notify man page。
 
 
 
套接字(socket),端口(port)和流(stream)

 
 
        在Mac OS X上,套接字和端口提供了应用程序之间通讯的可移植的机制。一个套接字代表了两个进程通讯通道的一端,可以是本地的,也可以是跨网络的。一个端口是本地计算机上进程之间的通道。应用程序可以用套接字和端口实现进程之间的有效的快速的信息传递。
 
 
        Core Foundation框架实现了代表套接字的类CFSocket/CFRunLoop和代表端口的类CFMessagePort。你可以将CFSocket加入CFRunLoop作为一种信息源接受信息,这样可以让你不必自己编写相关的线程,节省了系统资源并提高了性能。Core Foundation提供的套接字接口比BSD更易于使用。CFMessagePort也提供了相似的功能
 
 
        如果你在已经建立了网络,如Bonjour或HTTP。更好的传递信息的方法是使用Core Foundation和Cocoa框架提供的流(stream)接口,和CFNetwork网络类配合工作。这些接口提供了基于流的信息读取和写入方式。和套接字一样,流和CFNetwork和Run Loop可以配合工作,所以适合Mac的工作环境。
 
 
        关于CFSocket的更多信息,请看CFSocket Reference。关于Core Foundation流的更多信息,请看CFReadStream Reference和CFWriteStream Reference。关于Cocoa流的信息,请看Foundation Framework Refer-ence(http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Intro/IntroFoundation.html)。 

相关文章

摘要: 文章工具 收藏 投票评分 发表评论 复制链接 Swing 是设计桌面应用程序的一个功能非常强大工具包,...
苹果的开发:   我对于Linux/Unix的开发也是一窍不通,只知道可以用Java.不过接触了苹果过后,确实发现,世...
Mac OS线程开发包介绍   Mac OS X提供了到几套API用于创建程序级别的线程。从行为上来看,这些API创建...
最近非常关心Mac OS X上程序的开发,所以一直也在查找有什么语言用什么库来开发程序,在Apple的开发网站...
Ellena Ashley The Dragon Rock This story begins with Once Upon A Time, because the best stories ...
起因:   苹果公司在我们四川大学建立了个苹果实验室.正巧的是,上我们体系结构的老师居然就是这个实验室...