Skip to content

Instantly share code, notes, and snippets.

@hamrickdavid
Created October 14, 2011 00:33
Show Gist options
  • Save hamrickdavid/1285920 to your computer and use it in GitHub Desktop.
Save hamrickdavid/1285920 to your computer and use it in GitHub Desktop.
Monitoring Files With GCD Being Edited With A Text Editor
- (void)watchConfigFile:(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 & DISPATCH_VNODE_DELETE)
{
dispatch_source_cancel(source);
[blockSelf watchStyleSheet:path];
}
// Reload config file
});
dispatch_source_set_cancel_handler(source, ^(void)
{
close(fildes);
});
dispatch_resume(source);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment