Voltar à lista
Linux x86_64Arquivos & E/S#278

vmsplice

Move páginas de memória do espaço de usuário para um pipe, potencialmente sem cópia.

Descrição

Complementa `splice`, permitindo alimentar um pipe diretamente a partir de buffers de memória do processo em vez de outro descritor de arquivo.

man 2Desde o kernel 2.6.17

Atenção

Com SPLICE_F_GIFT, as páginas são efetivamente doadas ao kernel — o processo não deve mais modificar essa memória diretamente.

Assinatura

ssize_t vmsplice(
    int fd,
    const struct iovec * iov,
    unsigned long nr_segs,
    unsigned int flags
);

Parâmetros

ParâmetroTipoDescrição
fdintDescritor do pipe de destino.
iovconst struct iovec *Vetor de buffers de origem em memória.
nr_segsunsigned longNúmero de elementos em `iov`.
flagsunsigned intSPLICE_F_GIFT, SPLICE_F_NONBLOCK, entre outras.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1fdint
rsiargumento 2iovconst struct iovec *
rdxargumento 3nr_segsunsigned long
r10argumento 4flagsunsigned int

Valor de retorno

Número de bytes movidos em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EBADF(9)
Descritor de arquivo inválido.
EINVAL(22)
Argumento inválido.
ENOMEM(12)
Memória insuficiente para completar a operação.

Relacionadas