2017-10-16 95 views
0

我用Objective-C的应用程序,并想从C语言编写的应用程序看来我有两个选择接收邮件... XPC服务和管道。在问候NSPipe - 我试图决定如何,我可以打开,在新数据给定位置观看文件的管道。简而言之,我需要知道何时将新数据写入文件路径XYZ。然而,所有的我找到NSPipe的例子似乎是相互沟通的任务之一,所有这些任务都催生和同中央所属的应用程序......所以他们从来没有指定一个文件来观看。他们只是将一个过程的输入分配为另一个过程的输出。由于我没有自己的基于C的应用程序,我不能只分配一个C程序的输出作为我自己的任务的输入。相反,我期望将数据写入文件,并且需要知道它何时到达。我怎样才能做到这一点?NSPipe从输入过程中,我没有控制

回答

0

我不是从那里我得到这个代码肯定的,但我敢肯定,我从某处计算器只复制该代码。此代码监视文件,当它被监视的文件已变更的情况下,如果()条件内的语句。

-(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