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

时间:2019-06-16 01:48:38

标签: c linux ubuntu include system-calls

我试图在我的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;
}

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

2 个答案:

答案 0 :(得分:0)

如果已安装Linux手册页,请输入:

man memfd_create

将打开console.log(entitlements[0].entitlements[0].inAppDetails.inAppPurchaseData.purchaseTime);的手册页,内容为:

memfd_create()

因此,您只需要包括#define _GNU_SOURCE /* See feature_test_macros(7) */ #include <sys/mman.h> ,并且需要在编译器标志中使用<sys/mman.h>进行构建。或者,按照手册页的说明进行操作,并按字面意思-D_GNU_SOURCE,然后再添加标题。但是,我建议只使用#define _GNU_SOURCE进行编译。

如果没有安装手册页,可以在此处在线找到它们:

http://man7.org/linux/man-pages/dir_all_alphabetic.html

答案 1 :(得分:0)

在较旧的系统上,您必须为<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>定义添加linux/memfd.h,并通过MFD_包装器调用memfd_create()(并包括{{1} }和syscall(2)起作用)。

unistd.h