基于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)。
- 基于UNIX的操作系统内核——BSD管道等
- 基于UNIX的操作系统内核——Mach、驱动程序支持、BSD
- 基于UNIX的操作系统内核——IPC和Notification机制等
- 基于UNIX的操作系统内核——Cocoa中的Distributed Object
- 《unix高级环境编程》进程间通信——基于 STREAMS 的管道
- 《unix高级环境编程》进程间通信——基于 STREAMS 的管道
- RTLinux—基于Linux内核的实时操作系统RTLinux
- BSD的内核安全级别
- BSD的内核安全级别
- UNIX操作系统内核
- 关于BSD操作系统的答疑
- x86上的那些UNIX——BSD篇+主流桌面
- 两本讲述Unix和BSD内核设计原理的书
- 关于类unix系统(linux,bsd等)克隆的资料-2
- 基于L4微内核的操作系统
- 基于 Bochs 的操作系统内核实现
- 基于 Bochs 的操作系统内核实现
- Day05-基于Linux内核的Android操作系统
- Visual Studio.NET快捷键最爱收藏(多图)
- 在 Visual Studio .NET中使用Crystal Report(中)
- 在 Visual Studio .NET中使用Crystal Report(下)
- 10.2 流程分析
- 实用C#(一)
- 基于UNIX的操作系统内核——BSD管道等
- 运算符重载
- Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
- M.E. Bring .NET CLR Support to C++中文版(上篇)
- 开始我的csdn生活了.
- 驱动中实现模拟键盘按键
- Windows.NET下的UDDI开发指南
- 淘宝族青睐代购网
- 如何提高自己的编程能力