否#34; renameat2" Ubuntu 16.04上的系统调用函数

时间:2017-01-14 21:54:32

标签: c linux system-calls glibc

renameat2()的手册页说我需要包含<stdio.h>,但这不起作用。

我做的时候

cd /usr/include
grep -r renameat2

我看到__SYSCALL已定义,但没有glibc函数。系统调用的标志位于<linux/fs.h>,但不包括在内。

1 个答案:

答案 0 :(得分:6)

好的,我在这里找到了答案,glibc的一般问题是没有添加系统调用而且手册页缺少

  

注意:此系统调用没有glibc包装器;见注意事项。

注意其他页面上显示的内容。所以我很困惑。

阅读本文找到答案 https://lwn.net/Articles/655028/

这是代码

#include <sys/syscall.h>
#include <linux/fs.h>

//Open the old directories to obtain fds
int src_fd = open("old_dir", O_PATH);
int dest_fd = open("new_dir", O_PATH);
const char* src_path = "old_name.txt";
const char* dest_path = "new_name.txt";

unsigned int flags = RENAME_NOREPLACE;
int rc = syscall(SYS_renameat2, src_fd src_path, dest_fd, dest_path, flags);