Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux:由于服务器/磁盘中的电源/瞬时机械故障,是否可以部分执行目录重命名?_C++_Linux - Fatal编程技术网

C++ Linux:由于服务器/磁盘中的电源/瞬时机械故障,是否可以部分执行目录重命名?

C++ Linux:由于服务器/磁盘中的电源/瞬时机械故障,是否可以部分执行目录重命名?,c++,linux,C++,Linux,C/C++重命名函数可用于重命名目录。 假设以下情况(对于Linux) 目录X包含文件A、B和C。 X被重命名为Y(使用C/C++重命名函数)。操作正在进行时,服务器/磁盘的电源将断开。然后重新启动。 现在是否存在这样一种可能性:X目录中有少数文件,而Y目录中有其他文件。 例如 X:B Y:A,C这取决于实现,但对于我知道的所有文件系统,重命名只是替换标签。因此,目录的重命名与文件重命名操作没有区别。 当您重命名一个文件并关闭电源时,您永远不会得到两个文件X和Y,每个文件都有一半的文件内容。这取

C/C++重命名函数可用于重命名目录。 假设以下情况(对于Linux) 目录X包含文件A、B和C。 X被重命名为Y(使用C/C++重命名函数)。操作正在进行时,服务器/磁盘的电源将断开。然后重新启动。 现在是否存在这样一种可能性:X目录中有少数文件,而Y目录中有其他文件。 例如 X:B
Y:A,C

这取决于实现,但对于我知道的所有文件系统,重命名只是替换标签。因此,目录的重命名与文件重命名操作没有区别。
当您重命名一个文件并关闭电源时,您永远不会得到两个文件X和Y,每个文件都有一半的文件内容。

这取决于实现,但对于所有文件系统,我知道重命名只是替换标签。因此,目录的重命名与文件重命名操作没有区别。
当你重命名一个文件并关闭电源时,你永远不会得到两个文件X和Y,每个文件都有一半的文件内容。

重命名只是更改一个名称。文件的“id”,在linux中,目录是一个包含指向其他文件和目录的“链接”的文件,保持不变

由于文件系统始终直接依赖于任何类型硬件上的物理块存储,因此必须在文件系统结构中重写和链接存储标签的完整块

如果其间发生电源故障,“目录文件”可能会损坏。这意味着,涉及的重命名操作不止一个

但是: 现代文件系统有许多选项来检测和修复这种情况。ext4在后台有一个日志。如果任何访问可能被中断,日志将显示这些操作已开始但尚未完成的信息。通过安装这样的分区/fs,修复将自动进行。如果这是不可能的,fschk可以做这项工作

只有“一些文件”被移动的情况绝对不可能发生,因为重命名目录并不是创建新目录,而是将指向节点id的文件名/链接移动到新目录中,而只是现有目录的新名称


作为用户:只需使用现代文件系统,大部分断电故障都可以通过重启恢复。您可能会发现您的文件系统处于“旧”或“新”版本,但不在两者之间。

重命名只是更改名称。文件的“id”,在linux中,目录是一个包含指向其他文件和目录的“链接”的文件,保持不变

由于文件系统始终直接依赖于任何类型硬件上的物理块存储,因此必须在文件系统结构中重写和链接存储标签的完整块

如果其间发生电源故障,“目录文件”可能会损坏。这意味着,涉及的重命名操作不止一个

但是: 现代文件系统有许多选项来检测和修复这种情况。ext4在后台有一个日志。如果任何访问可能被中断,日志将显示这些操作已开始但尚未完成的信息。通过安装这样的分区/fs,修复将自动进行。如果这是不可能的,fschk可以做这项工作

只有“一些文件”被移动的情况绝对不可能发生,因为重命名目录并不是创建新目录,而是将指向节点id的文件名/链接移动到新目录中,而只是现有目录的新名称


作为用户:只需使用现代文件系统,大部分断电故障都可以通过重启恢复。你可以在旧的或“新”的版本中找到你的文件系统,但不能在两者之间找到。

“C/C++重命名函数”在C或C++标准中没有这样的功能。你指的是linux操作系统API吗?@πάνταῥεῖ 有
std::filesystem::rename
可以部分执行目录重命名。
可以。事情发生了,这很正常。目前,文件系统试图处理此类情况。要得到更具体的答案,您需要指定文件系统类型。对于高级文件系统,“重命名”应该是一个“原子”(快速、非阻塞)操作——关键部分就像底层块设备上的单个字节一样变化<代码>服务器/磁盘?-您必须指定文件系统和底层块设备是通过某种(netowrk?)共享机制装载的,还是本地装载的。现在的问题太宽泛了。它可能取决于“C/C++重命名函数”,在C或C++标准中没有这样的函数。你指的是linux操作系统API吗?@πάνταῥεῖ 有
std::filesystem::rename
可以部分执行目录重命名。
可以。事情发生了,这很正常。目前,文件系统试图处理此类情况。要得到更具体的答案,您需要指定文件系统类型。对于高级文件系统,“重命名”应该是一个“原子”(快速、非阻塞)操作——关键部分就像底层块设备上的单个字节一样变化<代码>服务器/磁盘?-您必须指定文件系统和底层块设备是通过某种(netowrk?)共享机制装载的,还是本地装载的。现在的问题太宽泛了。可能吧,视情况而定。