2013-07-11 40 views
2

我正在浏览用于文件和目录管理操作的Win32 API函数。我看到其中一些功能有他们所谓的“事务性”功能。什么是“事务性”文件操作?

例子:
CreateDirectoryCreateDirectoryTransacted
RemoveDirectoryRemoveDirectoryTransacted
CreateFileCreateFileTransacted
CopyFileCopyFileTransacted

我读的这些交易功能,维基百科的文章Transactional NTFSthis MSDN Magazine page解释。但由于这些页面中的术语很重(对我来说),我没有清楚地理解这些解释。他们都达成共识,认为这些功能是“原子”的。但据我所知,从“原子”一词来看,它是一个在其周围有自旋电子的原子核...

请问您能否给我解释一下基本和简单的英文句子,这些函数的目的和操作是什么?为什么和什么时候会喜欢交易版本的API函数?

+1

本文中的“原子”是指(希腊语)单词的原始含义,即“不可分割的”。原子操作就是这样。这样的操作要么成功完成,要么在出现错误的情况下,如果整体失败,那么无论发生什么,都不会有中途执行的结果,例如可能是损坏的文件系统。换句话说:当一个原子操作在一个一致的状态下执行时,它将*总是*导致一致的状态;旧的一致状态或新的一致状态,但两者之间没有任何关系。 – JimmyB

+0

也许看看这个:http://msdn.microsoft.com/en-us/library/hh802690%28v=vs.85%29.aspx,其中指出“原子性在这里是变化要么完全应用或不应用根本不一致的状态会导致文件损坏“。 – JimmyB

+0

本网站仅供其专家会员参考,因为即使他们不是专家,但他们知道如何提问未被标记为“脱离主题”的问题。 – Ameen

回答

1

简而言之,只有在过程中没有发生错误时才能完成交易(无论是文件系统,数据库还是银行)。

使用非事务性文件系统和API,说你有一个包含文件:

AAAA 

现在你要填写所有B的文件,但在这样的中间力量丢失,并不是所有数据都提交给磁盘。现在你有一个不一致的状态,当您将文件读回(电源恢复后):

BBAA 

记住FAT和磁盘扫描?

现在,事务处理时,文件系统基本上首先将更改写入磁盘上的不同位置,并且仅在完成时将“文件数据位置指针”inodes更改为新的数据位置,数据再次被占用为“可用”。

你并不需要为这个事务NTFS(TxF的),作为“标准” NTFS还promises to ensure consistency

NTFS是一个可恢复的文件系统,通过使用标准的事务日志和保证量的一致性恢复技术。在发生系统故障时,NTFS将运行恢复过程,以访问存储在事务日志文件中的信息。 NTFS恢复过程可确保该卷恢复到一致状态。事务日志需要很少的开销。

1

为什么和什么时候会喜欢交易版API函数?

我在上面引用的link中给出了一些场景。

其中之一是一个安装程序,它需要复制/安装几个文件到不同的位置,然后也许执行一些更新注册表的使用情况。在安装程序运行之前,系统可以被认为是一致的。一旦安装者完成了所有工作,软件就完全安装并且系统再次处于状态。

但是,如果在安装过程中电脑死机可能不是小事,以确定哪些安装过程的步骤已经成功地在飞机坠毁前完成,哪些还没有。事务性操作可以通过“自动”恢复,因为它是一致的系统状态之前安装运行,如果任何原因导致安装的过程中失败,给在这种情况下支持。如微软所述,开发人员从未采用过很多事务性的文件系统操作,这可能表明大多数应用程序并不需要这些功能,或者说有更简单的方法可以实现以应用程序特定的方式获得所需结果,MS也为其提供了示例。另外,“原子”操作的概念出现在软件开发的不同领域,例如在并发编程或数据库管理系统中。请参阅Wikipedia文章。