我想将文件从一个位置移动到另一个位置。 没有什么比移动到不同的驱动器或不同的文件系统复杂。 我知道这样做的“标准”方法是简单地复制文件,然后删除原来的。 但是我想要一些保存文件所有权,模式,上次访问/修改等的方法。 我假设我将不得不复制文件,然后编辑新文件的所有权,模式等,但我不知道如何做到这一点。
如果你不能使用重命名(2)系统调用(例如,因为源和目标在不同的文件系统上),你必须用stat(2)查询源文件的大小,权限和其他元数据。 使用chmod(2) , chown(2) , utime(2) ,使用read(2) , write(2) (使用几千字节的缓冲区), open(2) , close(2)和元数据复制数据 。 您可能还在意使用getxattr(2) , setxattr(2) , listxattr(2)
如果源文件和目标文件位于不同的文件系统上,则无法使移动原子化并避免竞态条件(因此,如果可能,使用rename(2)是可取的,因为根据其手册页是原子的)。 在移动操作期间始终可以修改源文件(通过另一个进程)…
阅读高级Linux编程以获取更多(也尝试了解一些mv
命令以了解它在做什么)。
如果文件的原始位置和新位置在同一文件系统上,则“移动”在概念上与“ 重命名 ”相同。
#include <stdio.h> int rename (const char *oldname, const char *newname)