Linux x86_64Arquivos & E/S#19
readv
Lê dados de um descritor de arquivo espalhando-os por múltiplos buffers em uma única chamada (scatter input).
Descrição
Evita o overhead de múltiplas chamadas `read` ou de concatenar/copiar buffers manualmente, além de ser semanticamente atômico em relação a outras operações no mesmo descritor.
Header:
sys/uio.hman 2Assinatura
ssize_t readv(int fd, const struct iovec * iov, int iovcnt);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo. |
| iov | const struct iovec * | Vetor de buffers de destino. |
| iovcnt | int | Número de elementos em `iov`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdint |
| rsi | argumento 2 | iovconst struct iovec * |
| rdx | argumento 3 | iovcntint |
Valor de retorno
Número total de bytes lidos em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EBADF(9)
- Descritor de arquivo inválido.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- EIO(5)
- Erro de E/S físico.