2017-10-16 78 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