#linux
- API
```c
int sync_file_range(int fd, off_t offset, off_t nbytes, unsigned int flags);
```
- 参数:
- **offset**: 文件范围的起始位置
- **nbytes**:范围的大小。如果为 0 ,则表示到文件末尾。
- sync 以 page 为单位,范围的起始和结束最终都会对齐到 page 边界。
- flags
- **SYNC_FILE_RANGE_WAIT_BEFORE**:
- ==等待==指定范围内的 pages 写出(提交给 device driver )
- 如果跟 SYNC_FILE_RANGE_WRITE 一起使用,则是先等待之前同范围内的请求完成,再处理当前 sync 请求。
- **SYNC_FILE_RANGE_WRITE**
- 异步提交写指定范围内的脏页,但仍然可能会==阻塞==如果请求队列满了。
- **SYNC_FILE_RANGE_WAIT_AFTER**
- 同 SYNC_FILE_RANGE_WAIT_BEFORE
- 区别在于跟 SYNC_FILE_RANGE_WRITE 一起使用时,会等待==当前== sync 请求的结果。
- 错误返回:
- SYNC_FILE_RANGE_WAIT_BEFORE 和 SYNC_FILE_RANGE_WAIT_AFTER 出错都会返回错误