Winapi 什么是「;“交易性”;文件操作?

Winapi 什么是「;“交易性”;文件操作?,winapi,file-io,windows-vista,ntfs,transactional,Winapi,File Io,Windows Vista,Ntfs,Transactional,我正在浏览Win32 API函数以进行文件和目录管理操作。我看到其中一些函数有所谓的“事务”对应项 示例: 和 和 和 及 我阅读了关于这些事务处理函数的解释,维基百科的文章和。但由于这些页面中的术语太多(对我而言),我无法清楚地理解这些解释。他们都一致认为这些功能是“原子的”。但就我从“原子”这个词所理解的,它是一个原子核,周围有旋转的电子 你能用简单的英语句子向我解释一下这些功能的用途和操作吗?为什么以及何时会选择API函数的事务处理版本?简而言之,只有在过程中没有发生错误时,事务(无论是文

我正在浏览Win32 API函数以进行文件和目录管理操作。我看到其中一些函数有所谓的“事务”对应项

示例:



我阅读了关于这些事务处理函数的解释,维基百科的文章和。但由于这些页面中的术语太多(对我而言),我无法清楚地理解这些解释。他们都一致认为这些功能是“原子的”。但就我从“原子”这个词所理解的,它是一个原子核,周围有旋转的电子

你能用简单的英语句子向我解释一下这些功能的用途和操作吗?为什么以及何时会选择API函数的事务处理版本?

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

使用非事务性文件系统和API,假设您有一个包含以下内容的文件:

AAAA

现在你想用所有的代码< B/<代码>来填充文件,但是在中间这样做的时候,电源丢失了,并不是所有的数据都被提交到磁盘上。现在,当您读回文件时(电源恢复后),您的状态不一致:

还记得FAT和scandisk吗

现在,对于事务,文件系统基本上首先将更改写入磁盘上的不同位置,并且仅在完成时才将“文件数据位置指针”更改到数据的新位置,将旧数据占用的空间再次标记为“可用”

您不需要事务性NTFS(TxF),因为“标准”NTFS也可以:

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

为什么以及何时会选择API函数的事务处理版本

我在上面引用的文章中给出了几个场景

其中之一是安装程序应用程序的用例,它需要将多个文件复制/安装到不同的位置,然后可能对注册表执行一些更新。在安装程序运行之前,可以认为系统是一致的。安装程序完成所有工作后,软件将完全安装,系统将再次处于一致状态

但是,如果计算机在安装过程中崩溃,那么确定哪些安装步骤在崩溃之前已成功执行,哪些尚未成功执行可能并不容易。在这种情况下,事务性操作可以通过“自动”恢复安装程序运行前的一致系统状态来提供支持,如果安装过程中由于任何原因失败

正如Microsoft所说,事务性文件系统操作从未被开发人员广泛采用,这可能表明绝大多数应用程序并不真正需要该功能,或者有更简单的方法以特定于应用程序的方式实现所需的结果,MS也给出了一些例子


此外,“原子”操作的概念出现在软件开发的不同领域,例如并发编程或数据库管理系统中。请参阅文章。

重要

请注意,Microsoft将整个“事务性NTFS”API标记为已弃用,并强烈反对使用该API。


请参阅(使用事务性NTFS的替代方案)

本上下文中的“原子”指的是(希腊语)单词的原始含义,即“不可分割”。原子操作是这样的。这样的操作要么成功完成,要么在出现错误的情况下整体失败,因此,无论发生什么情况,都不会有中途执行的结果,例如可能是损坏的文件系统。换句话说:当原子操作在一致状态下执行时,它将始终导致一致状态;旧的一致性状态或新的一致性状态,但两者之间没有任何内容。请看以下内容:,其中指出“原子性是指更改要么完全应用,要么根本不应用,因为不一致的状态会导致文件损坏”。此网站仅面向其专家成员,因为即使他们不是所问主题的专家,他们也知道如何提出不会被标记为“离题”的问题。
BBAA