sync_file_range(2) - wariua/manpages-ko GitHub Wiki

NAME

sync_file_range - ํŒŒ์ผ ์กฐ๊ฐ์„ ๋””์Šคํฌ๋กœ ๋™๊ธฐํ™”ํ•˜๊ธฐ

SYNOPSIS

#define _GNU_SOURCE         /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <fcntl.h>

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

DESCRIPTION

sync_file_range()๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋””์Šคํฌ์™€ ๋™๊ธฐํ™”ํ•˜๋ฉด์„œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.

offset์€ ๋™๊ธฐํ™”ํ•  ํŒŒ์ผ ๋ฒ”์œ„์˜ ์‹œ์ž‘ ๋ฐ”์ดํŠธ์ด๋‹ค. nbytes๋Š” ๋™๊ธฐํ™”ํ•  ๋ฒ”์œ„์˜ ๊ธธ์ด๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ง€์ •ํ•œ๋‹ค. nbytes๊ฐ€ 0์ด๋ฉด offset๋ถ€ํ„ฐ ํŒŒ์ผ ๋๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค. ๋™๊ธฐํ™”๋Š” ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ๋‹จ์œ„๋กœ ์ด๋ค„์ง„๋‹ค. offset์„ ํŽ˜์ด์ง€ ๊ฒฝ๊ณ„๋กœ ๋‚ด๋ฆฌ๊ณ  (offset+nbytes-1)์„ ํŽ˜์ด์ง€ ๊ฒฝ๊ณ„๋กœ ์˜ฌ๋ฆฐ๋‹ค.

flags ๋น„ํŠธ ๋งˆ์Šคํฌ ์ธ์ž๋Š” ๋‹ค์Œ ๊ฐ’๋“ค์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

SYNC_FILE_RANGE_WAIT_BEFORE
์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„์— ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ์ œ์ถœ๋ผ ์žˆ๋Š” ์ง€์ • ๋ฒ”์œ„ ๋‚ด ๋ชจ๋“  ํŽ˜์ด์ง€๋“ค์˜ ์“ฐ๊ธฐ๊ฐ€ ์ด๋ค„์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
SYNC_FILE_RANGE_WRITE
ํ˜„์žฌ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ์ œ์ถœ๋ผ ์žˆ์ง€ ์•Š์€ ์ง€์ • ๋ฒ”์œ„ ๋‚ด ๋ณ€๊ฒฝ ํŽ˜์ด์ง€ ๋ชจ๋‘์˜ ์“ฐ๊ธฐ๋ฅผ ๊ฐœ์‹œํ•œ๋‹ค. ์š”์ฒญ ํ ํฌ๊ธฐ๋ฅผ ๋„˜๊ฒŒ ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด ๋ธ”๋ก ํ•  ์ˆ˜๋„ ์žˆ์Œ์— ์œ ์˜ํ•˜๋ผ.
SYNC_FILE_RANGE_WAIT_AFTER
์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— ๋ฒ”์œ„ ๋‚ด ๋ชจ๋“  ํŽ˜์ด์ง€๋“ค์˜ ์“ฐ๊ธฐ๊ฐ€ ์ด๋ค„์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

flags๋ฅผ 0์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. no-op์ด๋‹ค.

๊ฒฝ๊ณ 

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๊ทนํžˆ ์œ„ํ—˜ํ•˜๋ฉฐ ์ด์‹์„ฑ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ์ด ๋™์ž‘๋“ค ์–ด๋А ๊ฒƒ๋„ ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์‘์šฉ์—์„œ ์—„๊ฒฉํ•˜๊ฒŒ ์ด๋ฏธ ์‹ค์ฒดํ™”๋œ ๋””์Šคํฌ ๋ธ”๋ก ๋ฎ์–ด์“ฐ๊ธฐ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ํฌ๋ž˜์‹œ ํ›„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. ํ•˜์ง€๋งŒ ์“ฐ๊ธฐ๊ฐ€ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ฎ์–ด์“ฐ๊ธฐ์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  copy-on-write ๋™์ž‘ ๋ฐฉ์‹์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ(๊ฐ€๋ น btrfs)์—์„œ๋Š” ๊ธฐ์กด์— ํ• ๋‹น๋œ ๋ธ”๋ก์„ ๋ฎ์–ด์“ฐ๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ ๊ธฐํ• ๋‹น ๊ณต๊ฐ„์— ์“ฐ๊ธฐ๋ฅผ ํ•  ๋•Œ ๋งŽ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋ธ”๋ก ํ• ๋‹น์ž ํ˜ธ์ถœ๊นŒ์ง€ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๊ทธ ๋ธ”๋ก์„ ๋””์Šคํฌ๋กœ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋””์Šคํฌ ์“ฐ๊ธฐ ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ๋””์Šคํฌ ์“ฐ๊ธฐ ์บ์‹œ๊ฐ€ ํœ˜๋ฐœ์„ฑ์ธ ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ์‚ฌํ•ญ

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() ํ˜ธ์ถœ ๋•Œ ์ง€์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋˜ ๋ณ€๊ฒฝ ํŽ˜์ด์ง€๋“ค ๋ชจ๋‘๊ฐ€ ์“ฐ๊ธฐ ๋ชฉ๋ก ํ•˜์— ์žˆ๋„๋ก ํ•œ๋‹ค. "๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ„ํ•œ ์“ฐ๊ธฐ ๊ฐœ์‹œ" ๋™์ž‘์ด๋‹ค.
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
sync_file_range() ํ˜ธ์ถœ ๋•Œ ์ง€์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋˜ ๋ณ€๊ฒฝ ํŽ˜์ด์ง€๋“ค ๋ชจ๋‘๊ฐ€ ๋””์Šคํฌ๋กœ ๊ฐ€๋„๋ก ํ•˜๋Š” "๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ„ํ•œ ์“ฐ๊ธฐ ๊ฐœ์‹œ" ๋™์ž‘์ด๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ sync_file_range()๋Š” 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์‹คํŒจ ์‹œ -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก errno๋ฅผ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EBADF
fd๊ฐ€ ์œ ํšจํ•œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.
EINVAL
flags์— ์œ ํšจํ•˜์ง€ ์•Š์€ ๋น„ํŠธ๋ฅผ ์ง€์ •ํ–ˆ๋‹ค. ๋˜๋Š” offset์ด๋‚˜ nbytes๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.
EIO
I/O ์˜ค๋ฅ˜.
ENOMEM
๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ.
ENOSPC
๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ.
ESPIPE
fd๊ฐ€ ์ •๊ทœ ํŒŒ์ผ, ๋ธ”๋ก ์žฅ์น˜, ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋‹Œ ๋ญ”๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

VERSIONS

๋ฆฌ๋ˆ…์Šค ์ปค๋„ 2.6.17์—์„œ sync_file_range()๊ฐ€ ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ๋‹ค.

CONFORMING TO

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋ฏ€๋กœ ์ด์‹์„ฑ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

NOTES

sync_file_range2()

์–ด๋–ค ์•„ํ‚คํ…์ฒ˜(๊ฐ€๋ น PowerPC, ARM)์—์„œ๋Š” 64๋น„ํŠธ ์ธ์ž๋ฅผ ์ ์ ˆํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์Œ์— ๋งž์ถฐ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ์•„ํ‚คํ…์ฒ˜์—์„œ SYNOPSIS์— ์žˆ๋Š” sync_file_range() ํ˜ธ์ถœ ์‹œ๊ทธ๋„ˆ์ฒ˜๋Š” fd์™€ offset ์ธ์ž ์‚ฌ์ด ํŒจ๋”ฉ์œผ๋กœ ๋ ˆ์ง€์Šคํ„ฐ ํ•˜๋‚˜๋ฅผ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. (์ž์„ธํ•œ ๋‚ด์šฉ์€ syscall(2) ์ฐธ๊ณ .) ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฐ ์•„ํ‚คํ…์ฒ˜๋“ค์—์„œ๋Š” ์ธ์ž ์ˆœ์„œ๋ฅผ ์ ์ ˆํžˆ ๋ฐ”๊พผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ •์˜ํ•œ๋‹ค.

int sync_file_range2(int fd, unsigned int flags,
                     off64_t offset, off64_t nbytes);

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ๋™์ž‘์€ ๊ทธ ์™ธ ๋ถ€๋ถ„์—์„œ๋Š” sync_file_range()์™€ ์ •ํ™•ํžˆ ๊ฐ™๋‹ค.

๋ฆฌ๋ˆ…์Šค 2.6.20์—์„œ ARM ์•„ํ‚คํ…์ฒ˜์— arm_sync_file_range()๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ด ์‹œ๊ทธ๋„ˆ์ฒ˜์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค 2.6.22์—์„œ PowerPC์— ๋น„์Šทํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ๋‹ค. glibc ์ง€์›์ด ์ œ๊ณต๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” glibc๊ฐ€ sync_file_range() ์ด๋ฆ„ ํ•˜์— ํˆฌ๋ช…ํ•˜๊ฒŒ sync_file_range2()๋ฅผ ๊ฐ์‹ธ ์ค€๋‹ค.

SEE ALSO

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


2017-09-15

โš ๏ธ **GitHub.com Fallback** โš ๏ธ