我有一个用 Objective-C 编写的应用程序,并试图从用 C 编写的应用程序接收消息。看来我有两个选择...... XPC 服务和管道。关于 NSPipe - 我正在尝试确定如何打开一个管道来监视给定位置的文件以获取新数据。简单地说,我需要知道新数据何时写入路径 XYZ 的文件。然而,我在 NSPipe 中找到的所有示例似乎都在相互通信的任务中,并且所有这些任务都由同一个中央应用程序产生和拥有......所以他们从不指定要观看的文件。相反,他们只是将一个进程的输入分配为另一个进程的输出。由于我不拥有基于 C 的应用程序,因此我不能只将该 C 程序的输出分配为我拥有的任务的输入。相反,我希望将数据写入文件,并且需要知道它什么时候到达。我怎样才能做到这一点?
问问题
92 次
1 回答
0
我不确定我是从哪里得到这段代码的,但我很确定我只是从 stackoverflow 的某个地方复制了这段代码。此代码监视文件并在它正在监视的文件发生更改时执行 if() 条件中的语句。
-(void)monitorFile:(NSString*) path
{
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
int fildes = open([path UTF8String], O_EVTONLY);
__block typeof(self) blockSelf = self;
__block dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, fildes,
DISPATCH_VNODE_DELETE | DISPATCH_VNODE_WRITE | DISPATCH_VNODE_EXTEND |
DISPATCH_VNODE_ATTRIB | DISPATCH_VNODE_LINK | DISPATCH_VNODE_RENAME |
DISPATCH_VNODE_REVOKE, queue);
dispatch_source_set_event_handler(source, ^{
unsigned long flags = dispatch_source_get_data(source);
if(flags)
{
// Do Stuff here
[blockSelf monitorFile:path];
}
});
dispatch_source_set_cancel_handler(source, ^(void) {
close(fildes);
});
dispatch_resume(source);
}
编辑:我找到了我从中复制的原始答案:https ://stackoverflow.com/a/26304208/7433869
于 2017-10-27T07:02:34.217 回答