我试图在我的C代码中使用memfd_create syscall。我尝试将sys / memfd.h包括在内,因为memfd_create的手册页说的是适当的,但是GCC给了我一个错误“ sys / memfd:没有这样的文件或目录”。
我尝试了Googling,但找不到任何人遇到相同的问题。我注意到memfd_create的手册页的某些版本说我应该包含sys.mman.h,但是当我尝试使用它时似乎没有帮助。它会说memfd_create是隐式声明的。
这是我的问题的最小再现。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/memfd.h>
int main(){
int fd;
fd = memfd_create("test", MFD_CLOEXEC);
return 0;
}
我希望上面的代码能够编译并正确运行。
Bionic(18.04)中的Ubuntu手册页尚未与此API保持同步(包括其在Bionic中的实现)。
焦点手册页正确显示了如何包括memfd_create()
。它说:
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <sys/mman.h>
因此,您只需要包含<sys/mman.h>
,并且需要-D_GNU_SOURCE
在编译器标记中进行构建。或者,按照手册页上的说明进行操作,#define _GNU_SOURCE
包括添加标题。但是,我建议仅使用进行编译-D_GNU_SOURCE
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句