sync_file_range(2) - wariua/manpages-ko GitHub Wiki
sync_file_range - ํ์ผ ์กฐ๊ฐ์ ๋์คํฌ๋ก ๋๊ธฐํํ๊ธฐ
#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);
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()
ํธ์ถ ๋ ์ง์ ๋ฒ์ ๋ด์ ์๋ ๋ณ๊ฒฝ ํ์ด์ง๋ค ๋ชจ๋๊ฐ ๋์คํฌ๋ก ๊ฐ๋๋ก ํ๋ "๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ํ ์ฐ๊ธฐ ๊ฐ์" ๋์์ด๋ค.
์ฑ๊ณต ์ sync_file_range()
๋ 0์ ๋ฐํํ๋ค. ์คํจ ์ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno
๋ฅผ ์ค์ ํ๋ค.
EBADF
-
fd
๊ฐ ์ ํจํ ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ์๋๋ค. EINVAL
-
flags
์ ์ ํจํ์ง ์์ ๋นํธ๋ฅผ ์ง์ ํ๋ค. ๋๋offset
์ด๋nbytes
๊ฐ ์ ํจํ์ง ์๋ค. EIO
- I/O ์ค๋ฅ.
ENOMEM
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ.
ENOSPC
- ๋์คํฌ ๊ณต๊ฐ ๋ถ์กฑ.
ESPIPE
-
fd
๊ฐ ์ ๊ท ํ์ผ, ๋ธ๋ก ์ฅ์น, ๋๋ ํฐ๋ฆฌ ์๋ ๋ญ๊ฐ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
๋ฆฌ๋
์ค ์ปค๋ 2.6.17์์ sync_file_range()
๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ค.
์ด ์์คํ ํธ์ถ์ ๋ฆฌ๋ ์ค ์ ์ฉ์ด๋ฏ๋ก ์ด์์ฑ ์๋ ํ๋ก๊ทธ๋จ์์๋ ํผํด์ผ ํ๋ค.
์ด๋ค ์ํคํ
์ฒ(๊ฐ๋ น 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()
๋ฅผ ๊ฐ์ธ ์ค๋ค.
fdatasync(2), fsync(2), msync(2), sync(2)
2017-09-15