在裸露的大纲中,我有一个应用程序在启动时查看目录并创建特殊文件的索引 - 之后它就像守护进程一样工作。另一个应用程序创建这样的“特殊”文件并将它们放在某个目录中。通知第一个应用程序有关新文件(索引它)的方法是最常见,最简单(第一个是运行时,所以它不应该减慢太多),如果可能的话,跨平台?
我看过RPC和IPC,但它们太重了(也是非跨平台和慢(需要很多功能才能工作 - 我需要一个简单的轻松工作方式),可能)。
答案 0 :(得分:7)
管道是一种选择:请参阅Network Programming with Pipes and Remote Procedure Calls(Windows)或Creating Pipes in C(Unix)。
我有一段时间没有这样做,但根据我对RPC,DCOM,COM,.NET Remoting和套接字编程的经验,我认为管道是最直接和最有效的选择。
答案 1 :(得分:1)
对于Windows(NTFS),您可以从操作系统获得有关目录已更改的通知。但它不是crosspl。而不是两个应用程序。
“IPC,但它们太重了” - 不,不,它们根本不重。你应该看一下命名管道 - 这个IPC是最快的,它与Win / Unix一样,略有不同。或插座!
答案 2 :(得分:1)
由于它在同一台PC上,你永远不会丢失任何数据包,这是UDP在网络上可能会错误地做的事情。
每个应用程序实例都需要一个特殊端口,但这很容易配置您(我假设)已经拥有的配置文件。
保持简单(:
答案 3 :(得分:0)
本地TCP套接字保证可以正常工作 - 正如Andrey
所提到的那样共享内存将是另一种选择,请看一下 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2044.html
答案 4 :(得分:0)
正如安德烈指出的那样,如果您提前就完整路径达成一致,您可以让操作系统告诉您何时添加。所有主要平台实际上都以某种形式支持这一点您可以使用跨平台库,例如QFileSystemWatcher。
编辑:我认为QFileSystemWatcher不会造成太大的性能损失。它绝对依赖于Linux,FreeBSD和Mac OS(我认为是Windows)上的通知的底层操作系统。见http://qtnode.net/wiki/QFileSystemWatcher答案 5 :(得分:0)
内存映射文件,套接字和命名管道都是高效,跨平台,ipc机制。好吧,访问命名管道和内存映射文件的api在POSIX和Win32之间有所不同,但基本的机制很相似,很容易制作跨平台包装器。套接字和命名管道往往很快,因为在进程间情况下,OS开发人员(大多数常见操作系统)都内置了快捷方式,这实际上使得套接字/命名管道编写了一个相当简单的内存部分包装。