2017-10-16 9 views
0

Objective-Cで書かれたアプリケーションを持っていて、Cで書かれたアプリケーションからメッセージを受け取ろうとしています。私は2つのオプションがあります。XPCサービスと配管。 NSPipeに関して、私は新しいデータのために与えられた場所のファイルを見るパイプをどのように開くことができるかを判断しようとしています。簡単に言えば、新しいデータがパスXYZでファイルに書き込まれるタイミングを知る必要があります。しかし、NSPipeで見つかったすべての例は、お互いに通信するタスクのように見えます。これらのタスクはすべて、同じ中央アプリケーションによって生成され、所有されています。代わりに、あるプロセスの入力を別のプロセスの出力として割り当てます。私はCベースのアプリケーションを所有していないので、自分が所有するタスクの入力としてそのCプログラムの出力を割り当てることはできません。代わりに、私はデータがファイルに書き込まれることを期待しており、いつ到着するかを知る必要があります。どうすればこれを達成できますか?プロセスからのNSPipe入力が制御されない

答えて

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

:私はからコピーした元の答えを見つけました
関連する問題