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

NAME

fsync, fdatasync - 파일의 μ½”μ–΄ λ‚΄ μƒνƒœλ₯Ό μ €μž₯ μž₯μΉ˜μ™€ λ™κΈ°ν™”ν•˜κΈ°

SYNOPSIS

#include <unistd.h>

int fsync(int fd);

int fdatasync(int fd);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

fsync():
glibc 2.16 및 이후:
μ–΄λ–€ κΈ°λŠ₯ 확인 λ§€ν¬λ‘œλ„ μ •μ˜λΌ μžˆμ„ ν•„μš” μ—†μŒ
glibc 2.15κΉŒμ§€:
_BSD_SOURCE || _XOPEN_SOURCE
|| /* glibc 2.8λΆ€ν„°: */ _POSIX_C_SOURCE >= 200112L
fdatasync():
_POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

DESCRIPTION

fsync()λŠ” 파일 λ””μŠ€ν¬λ¦½ν„° fdκ°€ κ°€λ¦¬ν‚€λŠ” 파일의 λ³€κ²½λœ μ½”μ–΄ λ‚΄ 데이터 (즉 λ³€κ²½λœ 버퍼 μΊμ‹œ νŽ˜μ΄μ§€) λͺ¨λ‘λ₯Ό λ””μŠ€ν¬ μž₯치둜 (λ˜λŠ” λ‹€λ₯Έ μ˜μ† μ €μž₯ μž₯치둜) 이동("ν”ŒλŸ¬μ‹œ")ν•œλ‹€. κ·Έλž˜μ„œ μ‹œμŠ€ν…œμ΄ μ£½κ±°λ‚˜ μž¬λΆ€νŒ… λ˜λŠ” κ²½μš°μ—λ„ 바뀐 정보λ₯Ό λͺ¨λ‘ 얻을 수 μžˆλ„λ‘ ν•œλ‹€. λ””μŠ€ν¬ μΊμ‹œκ°€ μ‘΄μž¬ν•˜λŠ” 경우 κ·Έ μΊμ‹œλ₯Ό 톡과해 κΈ°λ‘ν•˜κ±°λ‚˜ ν”ŒλŸ¬μ‹œ ν•˜λŠ” κ²ƒκΉŒμ§€ ν¬ν•¨ν•œλ‹€. 이동이 μ™„λ£Œλλ‹€κ³  μž₯μΉ˜κ°€ μ•Œλ¦΄ λ•ŒκΉŒμ§€ 호좜이 블둝 ν•œλ‹€.

fsync()λŠ” 파일 데이터λ₯Ό ν”ŒλŸ¬μ‹œ ν•  뿐 μ•„λ‹ˆλΌ νŒŒμΌμ— μ—°κ³„λœ 메타데이터 정보(inode(7) μ°Έκ³ )도 ν”ŒλŸ¬μ‹œ ν•œλ‹€.

fsync()λ₯Ό ν˜ΈμΆœν•΄λ„ κ·Έ νŒŒμΌμ„ 담은 디렉터리 λ‚΄ ν•­λͺ©κΉŒμ§€ λ””μŠ€ν¬μ— λ„λ‹¬ν–ˆλ‹€κ³  보μž₯λ˜μ§€λŠ” μ•ŠλŠ”λ‹€. 디렉터리에 λŒ€ν•œ 파일 λ””μŠ€ν¬λ¦½ν„°μ—λ„ λ”°λ‘œ fsync()κ°€ ν•„μš”ν•˜λ‹€.

fdatasync()λŠ” fsync()와 λΉ„μŠ·ν•˜λ˜ 후속 데이터 쑰회λ₯Ό μ˜¬λ°”λ‘œ μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•œ 게 μ•„λ‹ˆλΌλ©΄ λ³€κ²½λœ 메타데이터λ₯Ό ν”ŒλŸ¬μ‹œ ν•˜μ§€ μ•ŠλŠ”λ‹€. 예λ₯Ό λ“€μ–΄ st_atimeμ΄λ‚˜ st_mtime(각각 졜근 μ ‘κ·Ό μ‹œκ°„κ³Ό 졜근 μˆ˜μ • μ‹œκ°„. inode(7) μ°Έκ³ ) 변경은 후속 데이터 읽기λ₯Ό μ˜¬λ°”λ‘œ μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν”ŒλŸ¬μ‹œ ν•  ν•„μš”κ°€ μ—†λ‹€. 반면 (κ°€λ Ή ftruncate(2)λ₯Ό ν†΅ν•œ) 파일 크기(st_size) 변경은 메타데이터 ν”ŒλŸ¬μ‹œκ°€ ν•„μš”ν•  것이닀.

fdatasync()의 λͺ©μ μ€ λͺ¨λ“  메타데이터가 λ””μŠ€ν¬μ— 동기화돼야 ν•˜λŠ” 건 μ•„λ‹Œ μ‘μš©μ—μ„œ λ””μŠ€ν¬ ν™œλ™μ„ μ€„μ΄λŠ” 것이닀.

RETURN VALUE

성곡 μ‹œ 이 μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ€ 0을 λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° errnoλ₯Ό 적절히 μ„€μ •ν•œλ‹€.

ERRORS

EBADF
fdκ°€ μœ νš¨ν•œ μ—΄λ¦° 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μ•„λ‹ˆλ‹€.
EIO
동기화 쀑에 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€. 이 였λ₯˜λŠ” 같은 νŒŒμΌμ— λŒ€ν•œ μ–΄λ–€ λ‹€λ₯Έ 파일 λ””μŠ€ν¬λ¦½ν„°μ— 데이터λ₯Ό κΈ°λ‘ν•œ 것과 관련돼 μžˆμ„ 수 μžˆλ‹€. λ¦¬λˆ…μŠ€ 4.13λΆ€ν„°λŠ” write-backμ—μ„œμ˜ 였λ₯˜λ₯Ό κ·Έ 였λ₯˜λ₯Ό μ΄‰λ°œν•œ 데이터λ₯Ό κΈ°λ‘ν–ˆμ„ μˆ˜λ„ μžˆλŠ” λͺ¨λ“  파일 λ””μŠ€ν¬λ¦½ν„°λ“€λ‘œ λ³΄κ³ ν•œλ‹€. μ–΄λ–€ 파일 μ‹œμŠ€ν…œλ“€(κ°€λ Ή NFS)은 μ–΄λŠ 데이터가 μ–΄λŠ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 톡해 μ™”λŠ”μ§€ λ°€μ ‘ν•˜κ²Œ μΆ”μ ν•˜λ―€λ‘œ 더 μ •ν™•ν•˜κ²Œ λ³΄κ³ ν•œλ‹€. ν•˜μ§€λ§Œ λ‹€λ₯Έ 파일 μ‹œμŠ€ν…œλ“€(κ°€λ Ή λŒ€λΆ€λΆ„μ˜ 둜컬 파일 μ‹œμŠ€ν…œ)은 였λ₯˜κ°€ 기둝됐을 λ•Œ νŒŒμΌμ— λŒ€ν•΄ μ—΄λ € 있던 λͺ¨λ“  파일 λ””μŠ€ν¬λ¦½ν„°λ‘œ 였λ₯˜λ₯Ό λ³΄κ³ ν•œλ‹€.
ENOSPC
동기화 쀑에 λ””μŠ€ν¬ 곡간이 κ³ κ°ˆλ˜μ—ˆλ‹€.
EROFS, EINVAL
fdκ°€ 동기화λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 특수 파일(κ°€λ Ή νŒŒμ΄ν”„, FIFO, μ†ŒμΌ“)에 결속돼 μžˆλ‹€.
ENOSPC, EDQUOT
write(2) μ‹œμŠ€ν…œ 호좜 μ‹œμ μ— 곡간을 ν• λ‹Ήν•˜μ§€ μ•ŠλŠ” NFSλ‚˜ λ‹€λ₯Έ 파일 μ‹œμŠ€ν…œ μƒμ˜ νŒŒμΌμ— fdκ°€ 결속돼 있으며 μ΄μ „μ˜ μ–΄λ–€ μ“°κΈ° λ™μž‘μ΄ μ €μž₯ 곡간 λΆˆμΆ©λΆ„ λ•Œλ¬Έμ— μ‹€νŒ¨ν–ˆλ‹€.

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, 4.3BSD.

AVAILABILITY

fdatasync()κ°€ μ‚¬μš© κ°€λŠ₯ν•œ POSIX μ‹œμŠ€ν…œμ—λŠ” <unistd.h>에 _POSIX_SYNCHRONIZED_IOκ°€ 0보닀 큰 κ°’μœΌλ‘œ μ •μ˜λ˜μ–΄ μžˆλ‹€. (sysconf(3)도 μ°Έκ³ .)

NOTES

μ–΄λ–€ μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ—μ„œλŠ” (λ¦¬λˆ…μŠ€λŠ” μ•„λ‹˜) fdκ°€ μ“°κΈ° κ°€λŠ₯ν•œ 파일 λ””μŠ€ν¬λ¦½ν„°μ—¬μ•Ό ν•œλ‹€.

λ¦¬λˆ…μŠ€ 2.2 및 μ΄μ „μ—μ„œλŠ” fdatasync()κ°€ fsync()와 λ™λ“±ν•˜λ©°, κ·Έλž˜μ„œ μ„±λŠ₯μ—μ„œ μœ λ¦¬ν•œ 점이 μ—†λ‹€.

였래된 컀널과 잘 μ•ˆ μ“°λŠ” 파일 μ‹œμŠ€ν…œμ˜ fsync() κ΅¬ν˜„μ—μ„œλŠ” λ””μŠ€ν¬ μΊμ‹œλ₯Ό ν”ŒλŸ¬μ‹œ ν•  쀄 λͺ¨λ₯Έλ‹€. 이 경우 μ•ˆμ „ν•œ λ™μž‘μ„ 보μž₯ν•˜λ €λ©΄ hdparm(8)μ΄λ‚˜ sdparm(8)을 μ΄μš©ν•΄ λ””μŠ€ν¬ μΊμ‹œλ₯Ό λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν•œλ‹€.

SEE ALSO

sync(1), bdflush(2), open(2), posix_fadvise(2), pwritev(2), sync(2), sync_file_range(2), fflush(3), fileno(3), hdparm(8), mount(8)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️