1

像这样编写的文件是否可能(在 iPhone/iPod Touch 上):


if (FILE* file = fopen(filename, "wb")) {
    fwrite(buf, buf_size, 1, file);
    fclose(file);
}

被破坏,例如当应用程序被迫终止时?

据我所知, fwrite 应该是一个原子操作,所以当我用一条指令写入整个文件时,不会发生损坏。我在网上找不到任何其他信息。

4

3 回答 3

1

您可以使事情变得更容易,并使用具有等待您的方法的NSData类来 编写数据。writeToFile:atomically:包装原始缓冲区NSData并不难,有dataWithBytes:lengthordataWithBytesNoCopy:length:freeWhenDone:初始化程序。

于 2010-03-21T12:47:41.537 回答
1

写入的数据fwrite被缓冲。所以突然终止可能不会刷新缓冲区。fclose将刷新缓冲区,但这并不意味着字节也被写入磁盘(由于操作系统级缓存)AFAIK。

于 2010-03-21T12:48:00.513 回答
1

从什么时候开始fwrite是原子的?我找不到任何参考资料。无论如何,即使fwrite可以是原子的,和之间的时间fopen也不fwrite,所以如果你的应用程序在这些时间之间被迫终止,你会得到一个空文件。

当您为 iPhoneOS 编写代码时,您可以使用它-[NSData writeToFile:atomically:]来确保整个打开-写入-关闭过程是原子的(它通过写入临时文件来工作,然后替换原始文件。)

于 2010-03-21T12:48:26.363 回答