Linux x86_64Arquivos & E/S#327
preadv2
Como preadv, mas aceita flags adicionais por chamada (ex.: RWF_NOWAIT, RWF_HIPRI).
Descrição
Permite, por exemplo, tentar uma leitura que só completa se não bloquear (RWF_NOWAIT), sem precisar configurar O_NONBLOCK no descritor inteiro.
man 2Desde o kernel 4.6
Assinatura
ssize_t preadv2(
int fd,
const struct iovec * iov,
int iovcnt,
off_t offset,
int flags
);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`. |
| offset | off_t | Deslocamento absoluto de onde ler (-1 usa a posição atual do arquivo). |
| flags | int | RWF_HIPRI, RWF_NOWAIT, RWF_SYNC, etc. |
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 |
| r10 | argumento 4 | offsetoff_t |
| r8 | argumento 5 | flagsint |
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.
- EINVAL(22)
- Argumento inválido.
- EOPNOTSUPP(95)
- Operação não suportada nesse socket/arquivo (também ENOTSUP).