可可的命名管道

时间:2010-09-28 19:28:00

标签: cocoa named-pipes

我需要在两个应用程序之间进行高性能通信。我试过AppleEvent,但这不是一个好选择。我想使用命名管道,但我不知道如何在COCOA中使用它们。

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:6)

在Cocoa中没有特殊的方法。你基本上创建了fifo,一旦你拥有了它,你的进程就可以使用标准的Cocoa包装器(如NSFileHandle)读取/写入它。您可以使用NSFileManager或其他任何方式检查其存在,但您仍需要在某个时刻调用mkfifo(2)来创建命名管道。

所以:

if( mkfifo("/tmp/my_named_pipe", 0644) == -1 ) {
  // some error handling
  abort();
}

// Open and use the fifo as you would any file in Cocoa, but remember that it's a FIFO
NSFileHandle* fifoIN = [NSFileHandle fileForReadingAtPath:@"/tmp/my_named_pipe"];

就个人而言,我建议使用BSD或Unix套接字。有很多框架支持套接字,有时双向通道也更有用,你不必担心读者或作者是否已经准备就绪。

答案 1 :(得分:2)

命名管道还有其他选择:

  • 插座,正如Jason Coco已经提到的那样。
  • 马赫端口消息。可能是性能最高的选项,因为这几乎是Mach制作的功能。
  • 分布式对象。在端口上实现(我相信你可以使用套接字端口或Mach端口),这是最容易使用的选项,因为你发送消息到“远程”对象(由其他进程提供)与发送它们的方式相同到本地对象(在您自己的进程中创建)。