首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自我无法控制的进程的NSPipe输入

来自我无法控制的进程的NSPipe输入
EN

Stack Overflow用户
提问于 2017-10-17 04:45:24
回答 1查看 91关注 0票数 0

我有一个用Objective-C编写的应用程序,并且正在尝试从一个用C编写的应用程序接收消息。XPC服务和管道。关于NSPipe -我正在尝试确定如何打开一个管道来监视给定位置的文件以获取新数据。简单地说,我需要知道何时将新数据写入路径XYZ中的文件。然而,我在NSPipe中找到的所有示例似乎都是相互通信的任务,并且所有这些任务都是由同一个中央应用程序产生和拥有的……所以他们从不指定要监视的文件。相反,它们只是将一个进程的输入指定为另一个进程的输出。因为我不拥有基于C的应用程序,所以我不能仅仅将该C程序的输出指定为我拥有的任务的输入。相反,我希望将数据写入文件,并且需要知道数据何时到达。我如何才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2017-10-27 15:02:34

我不确定我是从哪里得到这段代码的,但我很确定我只是从stackoverflow中的某个地方复制了这段代码。此代码监视该文件,并在它所监视的文件发生更改时执行if()条件中的语句。

代码语言:javascript
复制
-(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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46778828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档