我试图在我的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;
}
我希望上面的代码能够编译并运行而不会出错。
答案 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
进行编译。
如果没有安装手册页,可以在此处在线找到它们:
答案 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