sync_file_range() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考资料
  Unix有用资源
  精选读物

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论区     关于TP  

sync_file_range() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

sync_file_range - 将文件段与磁盘同步

概要

#define _GNU_SOURCE 
#include <fcntl.h> 

void sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags);

描述

sync_file_range()允许对使用文件描述符fd引用的打开文件与磁盘同步进行精细控制。

offset是要同步的文件范围的起始字节。nbytes指定要同步的范围的长度(以字节为单位);如果nbytes为零,则同步从offset到文件末尾的所有字节。同步以系统页面大小为单位:offset向下舍入到页面边界;(offset+nbytes-1)向上舍入到页面边界。

flags 位掩码参数可以包含以下任何值

标签描述
SYNC_FILE_RANGE_WAIT_BEFORE
 在执行任何写入操作之前,等待写入指定范围中所有已提交给设备驱动程序进行写入的页面。
SYNC_FILE_RANGE_WRITE
 启动对指定范围内所有脏页面(当前未提交写入)的写入操作。
SYNC_FILE_RANGE_WAIT_AFTER
 在执行任何写入操作之后,等待指定范围内所有页面的写入操作。
允许将flags指定为0,作为空操作。

注释

这些操作都不会写入文件的元数据。因此,除非应用程序严格执行对已实例化磁盘块的覆盖写入,否则无法保证数据在崩溃后可用。

SYNC_FILE_RANGE_WAIT_BEFORESYNC_FILE_RANGE_WAIT_AFTER将检测任何I/O错误或ENOSPC条件,并将这些条件返回给调用者。

flags位的有用组合是

标签描述
SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE
 确保调用sync_file_range()时为脏状态的指定范围内的所有页面都将被写入。这是一个启动数据完整性写入操作。
SYNC_FILE_RANGE_WRITE
 启动对指定范围内所有脏页面(当前未处于写入状态)的写入操作。这是一个异步刷新到磁盘的操作。不适用于数据完整性操作。
SYNC_FILE_RANGE_WAIT_BEFORE(或SYNC_FILE_RANGE_WAIT_AFTER
 等待指定范围内所有页面的写入操作完成。这可以在之前的SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE操作之后使用,以等待该操作完成并获取其结果。
SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_AFTER
 这是一个传统的fdatasync(2)操作。这是一个写入数据完整性操作,它将确保调用sync_file_range()时为脏状态的指定范围内的所有页面都被提交到磁盘。

错误

标签描述
EBADF fd不是有效的文件描述符。
EIO I/O错误。
EINVAL flags指定了无效位;或offsetnbytes无效。
ENOMEM 内存不足。
ENOSPC 磁盘空间不足。
ESPIPE fd指向的不是普通文件、块设备、目录或符号链接。

符合标准

此系统调用是Linux特有的,应避免在可移植程序中使用。

参见



previous next Printer Friendly

广告


  

广告



广告