像这样编写的文件是否可能(在 iPhone/iPod Touch 上):
if (FILE* file = fopen(filename, "wb")) {
fwrite(buf, buf_size, 1, file);
fclose(file);
}
被破坏,例如当应用程序被迫终止时?
据我所知, fwrite 应该是一个原子操作,所以当我用一条指令写入整个文件时,不会发生损坏。我在网上找不到任何其他信息。
像这样编写的文件是否可能(在 iPhone/iPod Touch 上):
if (FILE* file = fopen(filename, "wb")) {
fwrite(buf, buf_size, 1, file);
fclose(file);
}
被破坏,例如当应用程序被迫终止时?
据我所知, fwrite 应该是一个原子操作,所以当我用一条指令写入整个文件时,不会发生损坏。我在网上找不到任何其他信息。
您可以使事情变得更容易,并使用具有等待您的方法的NSData类来 编写数据。writeToFile:atomically:
包装原始缓冲区NSData
并不难,有dataWithBytes:length
ordataWithBytesNoCopy:length:freeWhenDone:
初始化程序。
写入的数据fwrite
被缓冲。所以突然终止可能不会刷新缓冲区。fclose
将刷新缓冲区,但这并不意味着字节也被写入磁盘(由于操作系统级缓存)AFAIK。
从什么时候开始fwrite
是原子的?我找不到任何参考资料。无论如何,即使fwrite
可以是原子的,和之间的时间fopen
也不是fwrite
,所以如果你的应用程序在这些时间之间被迫终止,你会得到一个空文件。
当您为 iPhoneOS 编写代码时,您可以使用它-[NSData writeToFile:atomically:]
来确保整个打开-写入-关闭过程是原子的(它通过写入临时文件来工作,然后替换原始文件。)