Voltar à lista
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.17

Nota

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âmetroTipoDescrição
nameconst char *Nome apenas para depuração (aparece em /proc/[pid]/fd), sem significado semântico.
flagsunsigned intMFD_CLOEXEC, MFD_ALLOW_SEALING, MFD_HUGETLB.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1nameconst char *
rsiargumento 2flagsunsigned 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.

Relacionadas