出现 GCC 错误:“sys/memfd.h:没有这样的文件或目录”

chi*_*uce 2 c linux ubuntu system-calls include

我正在尝试在我的 C 代码中使用memfd_create系统调用。我试图包含sys/memfd.h,因为手册页memfd_create说是适当的,但是 GCC 给了我一个错误“sys/memfd:没有这样的文件或目录”。

我尝试过谷歌搜索,但找不到有同样问题的人。我注意到某些版本的联机帮助页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;
}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码能够编译并运行而不会出现错误。

小智 6

在较旧的系统上,您必须包含linux/memfd.hforMFD_定义,并memfd_create()通过包装器进行调用syscall(2)(并包含unistd.hand sys/syscall.hfor 它工作)。

#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <linux/memfd.h>
#include <err.h>
int main(void){
        int fd;
        if((fd = syscall(SYS_memfd_create, "test", MFD_CLOEXEC)) == -1)
                err(1, "memfd_create");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)