重命名函数rename和renameat
#include<stdio.h>
int rename(const char *oldname, const char *newname);
int renameat(int oldfd, const char *oldname, int newfd, const char *newname);
两个函数的返回值:若成功, 返回 0; 若出错, 返回 -1。
上面两个函数分为五种情形:
oldname
是普通文件非目录,若newname
已经存在且非目录时, 则先将newname
文件删除再将oldname
重命名为newname
void test_file()
{
if(rename("oldfile","newfile") < 0)
err_sys("rename failed");
printf("rename success!\n");
}
结果图如下:
由上图可知原本存在的newfile文件被删除,再重命名oldfile为newfile文件的。
如若oldname
指的是一个目录,且newname
是目录并已存在,则会先将已存在的newname
目录删除后再将oldname
目录重命名为newname
void test_directory()
{
if(rename("olddir", "newdir") < 0)
err_sys("rename failed");
printf("rename success!\n");
}
结果图如下:
由上图可知,newdir已存在,当执行之后newdir先被删除再重命名olddir为newdir。
如若oldname
或newname
为引用符号链接,则处理符号链接本身并非它所引用的文件
void test_symbollink()
{
if(rename("oldfilep", "newfilep") < 0)
err_sys("rename failed");
printf("rename success!\n");
}
结果图如下:
由上图可知oldfilep符号链接被重命名为newfilep。
不能对.
和..
重命名
如果oldname
和newname
引用同一文件,则函数不做任何更改而成功返回