rename函数报Invalid cross-device link
原因
rename不支持跨文件系统移动,详解介绍(rename(2) - Linux manual page)。参考别人帖子,直接在百度使用关键字linux c rename 跨磁盘,搜索出了一篇一样的问题帖子(http://blog.51cto.com/sugarlovecxq/1681973),他的解决方案是不让文件跨磁盘。没有修改代码来解决需要跨磁盘的情况。
解决方案
方案一:直接使用系统调用system("mv ....");
方案二:移动文件时,判断错误代码为EXDEV时,采用copy(读文件再写文件)的方式移动文件。
可以参考nginx中的实现ngx_ext_rename_file,也可以参考linux中mv命令的实现。
参考:https://www.jianshu.com/p/902d84deff87
https://www.cnblogs.com/mu-zhang/p/11269467.html