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)
| 归档时间: |
|
| 查看次数: |
5323 次 |
| 最近记录: |