【发布时间】:2020-04-29 17:50:22
【问题描述】:
这是我糟糕的尝试:
//open:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//raad, write, exit:
#include <unistd.h>
#include <stdlib.h>
//renameat2:
#include<stdio.h>
int main(){
int fd1, fd2;
//do I need those ifs?
if((fd1 = open("foo", O_RDWR)) == -1){
write(2, "File failed to open in read/write mode\n", 33);
exit(-1);
}
if((fd2 = open("bar", O_RDWR)) == -1 ){
write(2, "File failed to open in read/write mode\n", 34);
exit(-1);
}
renameat2(AT_FDCWD,fd1,AT_FDCWD,fd2, RENAME_EXCHANGE);
close(fd1);
close(fd2);
exit(0);
}
我正在尝试使用系统调用函数“renameat2”,但它给了我错误:
main.c:24:3: 警告:函数“renameat2”的隐式声明;你的意思是“重命名”吗?
main.c:24:13: error: 'AT_FDCWD' undeclared(首次在此函数中使用)
main.c:24:40: 错误:'RENAME_EXCHANGE' 未声明(在此函数中首次使用)
【问题讨论】:
-
是否在最顶部添加
#define _GNU_SOURCE,尤其是#includes,修复它吗? -
是的,它有帮助。但它递归地打开了另外两个问题:为什么它有帮助,现在如何处理:main.c:22:28: 警告:从不兼容的指针类型传递 'renameat2' 的参数 2 [-Wincompatible-pointer-types]
-
好的,我明白了。我发现了错误并对其进行了编辑。现在,为什么这有帮助? #define _GNU_SOURCE
标签: c kernel system-calls