文件和目录之函数rename和renameat

重命名函数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。

如若oldnamenewname为引用符号链接,则处理符号链接本身并非它所引用的文件

void test_symbollink()                                                          
{                                                                               
     if(rename("oldfilep", "newfilep") < 0)                                      
        err_sys("rename failed");                                               
     printf("rename success!\n");
} 

结果图如下:

由上图可知oldfilep符号链接被重命名为newfilep。

不能对...重命名

如果oldnamenewname引用同一文件,则函数不做任何更改而成功返回

发布了229 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40073459/article/details/104401563