sync_file_range

Autres langues

Langue: ja

Version: 2006-07-05 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

sync_file_range - sync a file segment with disk

½ñ¼°


#define _GNU_SOURCE

#include <fcntl.h>



int sync_file_range(int fd, off64_t offset, off64_t nbytes,

                    unsigned int flags);

ÀâÌÀ

sync_file_range() ¤ò»È¤¦¤È¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd ¤Ç»²¾È¤µ¤ì¤ë¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î¥Ç¥£¥¹¥¯¤È¤ÎƱ´ü¤Ë´Ø¤·¤Æ¡¢ ¤­¤áºÙ¤«¤ÊÀ©¸æ¤¬²Äǽ¤È¤Ê¤ë¡£

offset ¤Ï¡¢Æ±´ü¤ò¹Ô¤¦¥Õ¥¡¥¤¥ë¤ÎÎΰè¤Î³«»Ï¥Ð¥¤¥È¤Ç¤¢¤ë¡£ nbytes ¤Ë¤ÏƱ´ü¤ò¹Ô¤¦Îΰè¤ÎŤµ¤ò¥Ð¥¤¥Èñ°Ì¤Ç»ØÄꤹ¤ë¡£ nbytes ¤¬ 0 ¤Î¾ì¹ç¤Ï¡¢ offset ¤«¤é¥Õ¥¡¥¤¥ëËöÈø¤Þ¤Ç¤ÎÁ´¥Ð¥¤¥È¤òƱ´ü¤¹¤ë¡£ Ʊ´ü¤Ï¥·¥¹¥Æ¥à¤Î¥Ú¡¼¥¸¥µ¥¤¥º¤Îñ°Ì¤Ç¹Ô¤ï¤ì¤ë¡£ offset ¤Ï¥Ú¡¼¥¸¶­³¦¤Ë¤¢¤ï¤»¤ÆÀڤ겼¤²¤é¤ì¡¢ (offset+nbytes-1) ¤Ï¥Ú¡¼¥¸¶­³¦¤Ë¤¢¤ï¤»¤ÆÀÚ¤ê¾å¤²¤é¤ì¤ë¡£

¥Ó¥Ã¥È¥Þ¥¹¥¯°ú¤­¿ô flags ¤Ë¤Ï°Ê²¼¤ÎÃͤò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë:

SYNC_FILE_RANGE_WAIT_BEFORE
²¿¤é¤«¤Î½ñ¤­¹þ¤ß¤ò¹Ô¤¦Á°¤Ë¡¢»ØÄꤵ¤ì¤¿Îΰè¤Î¥Ú¡¼¥¸¤Ç ½ñ¤­½Ð¤·¤ò¹Ô¤¦¤è¤¦¤Ë¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Ë¤¹¤Ç¤ËÍ׵᤬ȯ¹Ô¤µ¤ì¤Æ¤¤¤ë ¥Ú¡¼¥¸¤Î½ñ¤­½Ð¤·¤¬Á´¤Æ´°Î»¤¹¤ë¤Î¤òÂԤġ£
SYNC_FILE_RANGE_WRITE
»ØÄꤵ¤ì¤¿Îΰè¤Î¥Ú¡¼¥¸¤Ç¡¢½ñ¤­½Ð¤·Í׵᤬ȯ¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤ Á´¤Æ¤Î dirty (¥­¥ã¥Ã¥·¥å¤À¤±¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤ë) ¥Ú¡¼¥¸¤Î ½ñ¤­½Ð¤·¤ò³«»Ï¤¹¤ë¡£
SYNC_FILE_RANGE_WAIT_AFTER
²¿¤é¤«¤Î½ñ¤­¹þ¤ß¸å¤Ë¡¢»ØÄꤵ¤ì¤¿Îΰè¤ÎÁ´¤Æ¤Î¥Ú¡¼¥¸¤Î ½ñ¤­½Ð¤·¤¬¹Ô¤ï¤ì¤ë¤Î¤òÂԤġ£

flags ¤Ë 0 ¤ò»ØÄꤷ¤¿¾ì¹ç¡¢²¿¤â¤·¤Ê¤¤¤³¤È¤òɽ¤¹¡£

¾ÜºÙ

¤³¤ì¤é¤ÎÁàºî¤Ç¤Ï¤É¤ì¤â¥Õ¥¡¥¤¥ë¤Î¥á¥¿¥Ç¡¼¥¿¤Î½ñ¤­½Ð¤·¤ò¹Ô¤ï¤Ê¤¤¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬³Î¼Â¤ËºîÀ®ºÑ¤ß¤Î¥Ç¥£¥¹¥¯¥Ö¥í¥Ã¥¯¤Î ¾å½ñ¤­¤ò¼Â¹Ô¤·¤Ê¤¤¸Â¤ê¡¢¥¯¥é¥Ã¥·¥å¤Î¸å¤Ç¤â¥Ç¡¼¥¿¤¬ÍøÍѲÄǽ¤Ç¤¢¤ë ÊݾڤϤʤ¤¡£

SYNC_FILE_RANGE_WAIT_BEFORE ¤È SYNC_FILE_RANGE_WAIT_AFTER ¤Ï I/O ¥¨¥é¡¼¤ä ENOSPC ¾õÂÖ¤ò¸¡½Ð¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤Ë¤³¤ì¤é¤Î¾ðÊó¤òÊÖ¤¹¡£

flags ¤ÎÌò¤ËΩ¤Ä¥Ó¥Ã¥È¤ÎÁȤ߹ç¤ï¤»¤ò°Ê²¼¤Ë¼¨¤¹:

SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE
»ØÄꤵ¤ì¤¿ÈÏ°ÏÆâ¤Î¥Ú¡¼¥¸¤Ç¡¢ sync_file_range() ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿ºÝ¤Ë dirty ¤Ç¤¢¤Ã¤¿Á´¤Æ¤Î¥Ú¡¼¥¸¤¬¡¢ ³Î¼Â¤Ë½ñ¤­½Ð¤·ÂоݤȤʤë¤è¤¦¤Ë¤¹¤ë¡£ ¤³¤ì¤Ï¡¢start-write-for-data-integrity Áàºî (¥Ç¡¼¥¿´°Á´À­³ÎÊݤΤ¿¤á¤Î½ñ¤­¹þ¤ß³«»Ï¤ÎÁàºî) ¤Ç¤¢¤ë¡£
SYNC_FILE_RANGE_WRITE
»ØÄꤵ¤ì¤¿ÈÏ°ÏÆâ¤Î¥Ú¡¼¥¸¤Ç¡¢¸½ºß½ñ¤­½Ð¤·Ãæ¤Ç¤Ê¤¤Á´¤Æ¤Î dirty ¥Ú¡¼¥¸¤Î ½ñ¤­½Ð¤·¤ò³«»Ï¤¹¤ë¡£¤³¤ì¤ÏÈóƱ´ü¤Î¥Ç¥£¥¹¥¯¤Ø¤Î¥Õ¥é¥Ã¥·¥å (flush-to-disk) Áàºî¤Ç¤¢¤ë¡£¥Ç¡¼¥¿´°Á´À­³ÎÊݤ¬É¬ÍפÊÁàºî¤È¤·¤Æ¤ÏŬÀڤǤϤʤ¤¡£
SYNC_FILE_RANGE_WAIT_BEFORE (or 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) Áàºî¤½¤Î¤â¤Î¤Ç¤¢¤ë¡£ ¤³¤ì¤Ï write-for-data-integrity Áàºî (¥Ç¡¼¥¿´°Á´À­³ÎÊݤΤ¿¤á¤Î½ñ¤­¹þ¤ß) ¤Ç¤¢¤ê¡¢»ØÄꤵ¤ì¤¿ÈÏ°ÏÆâ¤Î¡¢ sync_file_range() ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç dirty ¤ÊÁ´¤Æ¤Î¥Ú¡¼¥¸¤¬ ¥Ç¥£¥¹¥¯¤Ë³ÊǼ¤µ¤ì¤ë¤³¤È¤¬Êݾڤµ¤ì¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤Î¾ì¹ç¡¢ sync_file_range() ¤Ï 0 ¤òÊÖ¤¹¡£¼ºÇԤξì¹ç¡¢-1 ¤òÊÖ¤·¡¢ error ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£

¥¨¥é¡¼

EBADF
fd ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ï¤Ê¤¤¡£
EIO
I/O ¥¨¥é¡¼¡£
EINVAL
flags ¤ËÉÔÀµ¤Ê¥Ó¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¡£¤Þ¤¿¤Ï offset ¤« nbytes ¤¬ÉÔÀµ¤Ç¤¢¤ë¡£
ENOMEM
¥á¥â¥êÉÔ­¤Ç¤¢¤ë¡£
ENOSPC
¥Ç¥£¥¹¥¯ÎΰèÉÔ­¤Ç¤¢¤ë¡£
ESPIPE
fd ¤¬¡¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë¡¢¥Ö¥í¥Ã¥¯¥Ç¥Ð¥¤¥¹¡¢¥Ç¥£¥ì¥¯¥È¥ê¡¢¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯ °Ê³°¤Î¤â¤Î¤ò»Ø¤·¤Æ¤¤¤ë¡£

¥Ð¡¼¥¸¥ç¥ó

sync_file_range() ¤Ï¥«¡¼¥Í¥ë 2.6.17 ¤Ç Linux ¤ËÅо줷¤¿¡£

½àµò

¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux Æȼ«¤Ç¤¢¤ê¡¢ °Ü¿¢À­¤¬É¬Í×¤Ê¥×¥í¥°¥é¥à¤Ç¤Ï»ÈÍѤòÈò¤±¤ë¤Ù¤­¤Ç¤¢¤ë¡£

´ØÏ¢¹àÌÜ

fdatasync(2), fsync(2), msync(2), sync(2), feature_test_macros(7)