English 中文(简体)
用户和共有的环境
原标题:Cross-user and cross-process shared settings
  • 时间:2009-08-26 22:02:11
  •  标签:

我有两个过程——一个用户过程和一个根基级发射Daemon。 我和这两个进程一样,都有共同的环境。 我试图通过一个qlite数据库来做到这一点,但已陷入腐败问题。 我对使用<条码>NSUserDefaults的想法,但<条码>NS GlobalDomain似乎对用户来说只是全球性的,我需要一个交叉用户的持久性领域,<条码>NSUserDefaults似乎没有提供。

我尝试直接阅读和撰写XML文件,我可以这样做,用多种读物(通过简单的<代码>NSLock)进行罚款,但当我试图在档案中应用<代码>O_EXLOCK,以防止一个程序提交档案,而另一个程序是,看来没有工作。

。 有一个<代码>kCFP参比sAnyUser,但文件指出,我只能使用,如果我拥有行政特权(用户程序不存在)。

因此,我的问题是:

我如何能够有效地实施交叉处理和用户共享的环境?

最佳回答

页: 1 O_EXLOCK approach, Packped into an NSFileHandle for Lip (-initWithFileDescriptor:). 与此类似(未测试;未完成):

写作:

int fd = open([path UTF8String], O_TRUNC|O_EXLOCK);
if (fd >= 0)
{
    NSFileHandle *fh = [[NSFileHandle alloc] initWithFileDescriptor:fd closeOnDealloc:YES];
    [fh writeData:xmlData]; // Creating xmlData left as exercise for the reader
    [fh release];
}
else // Error stuff

阅读:

int fd = open([path UTF8String], O_RDONLY|O_SHLOCK);
if (fd >= 0)
{
    NSFileHandle *fh = [[NSFileHandle alloc] initWithFileDescriptor:fd closeOnDealloc:YES];
    NSData *xmlData = [fh readDataToEndOfFile];
    [fh release];
}
else // Error stuff

当然,这将会阻碍,因此,你需要使用O_NONBLOCK,或将其置于一个非倡议的深处,这样,德国马克的 app就 t。

你与O_EXLOCK再次看到的问题是什么?

问题回答

请注意,使用<代码>O_EXLOCK和O_SHLOCK,open(>,仅请您避免打<代码>flock(2<>>>>>>>。 外交部 X仅支持咨询锁定,作为<代码>flock( notes:

咨询锁使合作进程能够持续地进行档案业务,但不能保证一致性(即,程序在不使用可能导致不一致的咨询锁的情况下仍然可以查阅档案)。

那么,如果两 app都不会在打开咨询锁档案时选择进入咨询锁定系统,你就会遇到问题。

你们还可以尝试让用户程序通过使用皇家骑士团的 da门发出电话。 然后,它会代表客户申请处理所有缺省书;缺省读本已击中任何用户、目前的东道/任何东道国违约。





相关问题
热门标签