Linux x86_64Arquivos & E/S#0
read
Lê até count bytes de um descritor de arquivo para um buffer, avançando a posição do arquivo.
Descrição
A chamada de sistema mais fundamental de E/S no Unix: funciona da mesma forma sobre arquivos comuns, pipes, sockets, terminais e a maioria dos dispositivos, graças ao modelo 'tudo é um arquivo'. Pode retornar menos bytes do que o pedido (short read) mesmo sem erro nem fim de arquivo — programas robustos devem tratar isso em loop.
Header:
unistd.hman 2Assinatura
ssize_t read(int fd, void * buf, size_t count);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo a ler. |
| buf | void * | Buffer de destino. |
| count | size_t | Número máximo de bytes a ler. |
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 | bufvoid * |
| rdx | argumento 3 | countsize_t |
Valor de retorno
Número de bytes lidos (0 indica fim de arquivo) 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).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- EIO(5)
- Erro de E/S físico.