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

廣告


  

廣告



廣告
© . All rights reserved.