Linux x86_64Memória#319
memfd_create
Cria um arquivo anônimo residente inteiramente em memória, sem nome visível no sistema de arquivos.
Descrição
Combina as vantagens de um descritor de arquivo (pode ser mapeado com mmap, passado entre processos via SCM_RIGHTS) com as de memória anônima (sem persistência em disco). Muito usado para compartilhar buffers grandes entre processos de forma segura (ex.: Chromium, Wayland, systemd).
Header:
sys/mman.hman 2Desde o kernel 3.17Nota
Com MFD_ALLOW_SEALING + fcntl(F_ADD_SEALS), o conteúdo pode ser tornado imutável — usado para compartilhar dados com um processo não confiável com garantia de que ele não foi alterado depois.
Assinatura
int memfd_create(const char * name, unsigned int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| name | const char * | Nome apenas para depuração (aparece em /proc/[pid]/fd), sem significado semântico. |
| flags | unsigned int | MFD_CLOEXEC, MFD_ALLOW_SEALING, MFD_HUGETLB. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | nameconst char * |
| rsi | argumento 2 | flagsunsigned int |
Valor de retorno
Um novo descritor de arquivo em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENFILE(23)
- Limite de arquivos abertos no sistema atingido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.