Linux x86_64Arquivos & E/S#277
sync_file_range
Sincroniza com o disco apenas um intervalo específico de um arquivo, em vez do arquivo inteiro.
Descrição
Dá controle mais fino que `fsync`/`fdatasync` sobre quando e quais partes de um arquivo grande são persistidas, útil para bancos de dados e outras aplicações sensíveis a I/O.
man 2Desde o kernel 2.6.17
Atenção
Não sincroniza metadados — não substitui `fsync` quando a integridade do metadado do arquivo também importa (ex.: seu tamanho após um crash).
Assinatura
int sync_file_range(
int fd,
off64_t offset,
off64_t nbytes,
unsigned int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo. |
| offset | off64_t | Início do intervalo. |
| nbytes | off64_t | Tamanho do intervalo (0 = até o fim do arquivo). |
| flags | unsigned int | SYNC_FILE_RANGE_WAIT_BEFORE, WRITE, WAIT_AFTER. |
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 | offsetoff64_t |
| rdx | argumento 3 | nbytesoff64_t |
| r10 | argumento 4 | flagsunsigned int |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EIO(5)
- Erro de E/S físico.
- ENOSPC(28)
- Sem espaço livre no dispositivo.
- ENOMEM(12)
- Memória insuficiente para completar a operação.