在C中移动Linux上的文件

  • 平台:Debian Wheezy 3.2.0-4-686-pae
  • 编译器:GCC(Debian 4.7.2-5)4.7.2(代码::块)

我想将文件从一个位置移动到另一个位置。 没有什么比移动到不同的驱动器或不同的文件系统更复杂。 我知道执行此操作的“标准”方法是简单地复制文件然后删除原始文件。 但我想要一些方法来保留文件的所有权,模式,最后的访问/修改等。 我假设我将不得不复制文件,然后编辑新文件的所有权,模式等,但我不知道如何做到这一点。

如果你不能使用rename(2)系统调用(例如因为源和目标在不同的文件系统上),你必须用stat(2)查询源文件的大小,权限和其他元数据; 使用read(2) , write(2) (使用几千字节的缓冲区), open(2) , close(2)以及使用chmod(2) , chown(2) , utime(2)的元数据来复制数据 。 您可能还关心使用getxattr(2) , setxattr(2) , listxattr(2)复制属性

如果源和目标位于不同的文件系统上,则无法使primefaces移动并避免竞争条件(因此,如果可能,最好使用rename(2) ,因为根据其手册页它是primefaces的)。 在移动操作期间,始终可以修改源文件(通过其他进程)…

阅读高级Linux编程以获取更多信息(并尝试使用某些mv命令来了解它正在做什么)。

如果文件的原始位置和新位置在同一文件系统上,则“移动”在概念上与“ 重命名 ”相同。

 #include  int rename (const char *oldname, const char *newname)