当前位置: 代码迷 >> 综合 >> Linux rename/renameat 函数
  详细解决方案

Linux rename/renameat 函数

热度:67   发布时间:2024-02-08 14:01:18.0

文章目录

      • 一、函数定义
        • 1.1 函数的简单说明
      • 二、实例
        • 2.1 文件重命名
        • 2.2 (文件重命名)运行结果
        • 2.3 文件移动并重命名(验证)
        • 2.4 (文件移动并重命名)运行结果

一、函数定义

#include <stdio.h>int rename(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */
#include <stdio.h>int renameat(int olddirfd, const char *oldpath,int newdirfd, const char *newpath);

1.1 函数的简单说明

  • 这两个函数都是对文件(包括符号链接,而不是符号链接指向的文件)、文件夹进行重命名【Linux里重命名可以对文件(文件夹)进行移动】。
  • 当newpath已经存在的情况下,文件会进行覆盖(权限允许)。文件夹则会删除原来的文件夹(原来的文件夹必须为空),再重命名。

二、实例

2.1 文件重命名

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc, char **args)
{if (rename("test", "hotice0") < 0) {perror("rename test to hotice0 with fail");exit(-1);}return 0;
}

2.2 (文件重命名)运行结果

// 重命名文件
hotice0@ubuntu:~/Documents/Unix_Program$ echo "hotice0" > hotice0
hotice0@ubuntu:~/Documents/Unix_Program$ echo "test" > test
hotice0@ubuntu:~/Documents/Unix_Program$ ./rename_renameat 
hotice0@ubuntu:~/Documents/Unix_Program$ cat hotice0 
test
hotice0@ubuntu:~/Documents/Unix_Program$ cat test
cat: test: No such file or directory
// 重命名文件夹
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir hotice0
hotice0@ubuntu:~/Documents/Unix_Program$ echo "hotice0 file content" > hotice0/file
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir test
hotice0@ubuntu:~/Documents/Unix_Program$ ./rename_renameat
rename test to hotice0 with fail: Directory not empty

可以看到如果newpath指定的文件夹中有文件时,rename则无法运行成功。

2.3 文件移动并重命名(验证)

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc, char **args)
{if (rename("test", "test_dir/hotice0") < 0) {perror("rename test to hotice0 with fail");exit(-1);}return 0;
}

2.4 (文件移动并重命名)运行结果

hotice0@ubuntu:~/Documents/Unix_Program$ echo "test" > test
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir test_dir
hotice0@ubuntu:~/Documents/Unix_Program$ cat test_dir/hotice0 
test