Obj-C(iPhone)中的读写文件锁定

Posted

技术标签:

【中文标题】Obj-C(iPhone)中的读写文件锁定【英文标题】:Read-write file locking in Obj-C (iPhone) 【发布时间】:2011-08-20 14:26:45 【问题描述】:

我正在寻找使用锁定读/写文件的方法。 ios sdk 支持这个功能吗?

我看到有两种方法可以读写文件。

第一个是NSFileManager,另一个是NSInputStream/NSOutputStream,但是我还没有看到处理文件并发的方法,例如用写锁打开文件。

或者我必须自己实现那些锁定?

【问题讨论】:

【参考方案1】:

一般来说,iOS 应用程序不会打扰锁定文件,因为这些文档是与其他应用程序分开的沙盒。 flock() 在 iOS 中实现,但我没有亲自使用过。如果您有多个线程或类共享相同的文件,这可能会很有用。

【讨论】:

我会尝试flock(),甚至只是一个包含锁定文件列表的内部线程安全数据结构。例如,您可以使用 NSMutableSet 来包含所有已锁定文件的完整路径名列表。您必须确保在访问集合时使用@synchronized,但这应该不会太难。公平访问会有点难以实现——等待时间最长的线程才能访问文件。【参考方案2】:

NSOutputStream outputStreamToFileAtPath:append: 保持对文件的写锁定。 您仍然可以使用 fopenfstream(在 objc++ 中),它们将像在常规 linux 中一样工作。

【讨论】:

以上是关于Obj-C(iPhone)中的读写文件锁定的主要内容,如果未能解决你的问题,请参考以下文章

详解ios文件系统文件目录读写操作-备用

文件读写两三事

IO读写操作的TPL Dataflow实现中的内存问题

php如何解决多线程同时读写一个文件的问题

JAVA 并发编程-读写锁之模拟缓存系统

与 MemoryMappedFile 并行读写