是否可以(在iPhone/iPod Touch上)编写这样的文件:
if (FILE* file = fopen(filename, "wb")) {
fwrite(buf, buf_size, 1, file);
fclose(file);
}被破坏,例如当应用程序被强制终止时?
据我所知,fwrite应该是一个原子操作,所以当我用一条指令写整个文件时,不应该发生损坏。我在网上找不到任何与此相反的信息。
发布于 2010-03-21 20:48:26
从什么时候开始fwrite是原子的?我找不到任何推荐人。无论如何,即使fwrite可以是原子的,fopen和fwrite之间的时间不是原子的,所以如果你的应用程序在这两个时间之间被强制终止,你会得到一个空文件。
在为iPhoneOS编写代码时,可以使用-[NSData writeToFile:atomically:]来确保整个打开-写入-关闭过程是原子的(它的工作方式是写入一个临时文件,然后替换原来的临时文件)。
发布于 2010-03-21 20:47:42
您可以让事情变得更简单,并使用具有等待您的writeToFile:atomically:方法的NSData类来编写数据。用NSData包装原始缓冲区并不难,有dataWithBytes:length或dataWithBytesNoCopy:length:freeWhenDone:初始化器。
发布于 2010-03-21 20:48:01
对使用fwrite写入的数据进行缓冲。因此,突然终止可能不会刷新缓冲区。fclose将刷新缓冲区,但这并不意味着字节也会写入磁盘(由于操作系统级缓存) AFAIK。
https://stackoverflow.com/questions/2487085
复制相似问题