msync(2) - wariua/manpages-ko GitHub Wiki
msync - νμΌμ λ©λͺ¨λ¦¬ λ§΅κ³Ό λκΈ°ν νκΈ°
#include <sys/mman.h>
int msync(void *addr, size_t length, int flags);
msync()
λ mmap(2)μΌλ‘ λ©λͺ¨λ¦¬λ‘ λ§΅ ν νμΌμ μ½μ΄ λ΄ μ¬λ³Έμ μ΄λ€μ§ λ³κ²½ λ΄μ©μ νμΌ μμ€ν
μΌλ‘ λ΄λ¦°λ€. μ΄ νΈμΆμ μ°μ§ μμΌλ©΄ munmap(2)μ νΈμΆνκΈ° μ μλ λ³κ²½ λ΄μ©μ΄ κΈ°λ‘λλ€λ 보μ₯μ΄ μλ€. λ μ ννκ²λ addr
μμ μμνκ³ κΈΈμ΄κ° length
μΈ λ©λͺ¨λ¦¬ μμμ λμνλ νμΌ λΆλΆμ κ°±μ νλ€.
flags
μΈμμλ MS_ASYNC
μ MS_SYNC
μ€ λ± νλλ₯Ό μ§μ ν΄μΌ νλ©°, μ νμ μΌλ‘ MS_INVALIDATE
λΉνΈκΉμ§ ν¬ν¨μν¬ μ μλ€. μ΄ λΉνΈλ€μ μλ―Έλ λ€μκ³Ό κ°λ€.
MS_ASYNC
- κ°±μ μ μμ½νκ² νκ³ νΈμΆμ μ¦μ λ°ννλ€.
MS_SYNC
- κ°±μ μ μμ²νκ³ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦°λ€.
MS_INVALIDATE
- κ°μ νμΌμ λ€λ₯Έ λ§€νλ€μ 무ν¨ννλλ‘ μμ²νλ€. (κ·Έλμ λ°©κΈ μ¨λ£μ μ΅μ κ°λ€λ‘ κ°±μ λ μ μκ² νλ€.)
μ±κ³΅ μ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° errno
λ₯Ό μ μ ν μ€μ νλ€.
EBUSY
-
flags
μMS_INVALIDATE
λ₯Ό μ§μ νλλ° μ§μ ν μ£Όμ λ²μμ λ©λͺ¨λ¦¬ μ κΈμ΄ μ‘΄μ¬νλ€. EINVAL
-
addr
μ΄PAGESIZE
μ λ°°μκ° μλλ€.flags
μMS_ASYNC | MS_INVALIDATE | MS_SYNC
μΈμ λΉνΈκ° μ€μ λΌ μλ€.flags
μMS_SYNC
μMS_ASYNC
κ° ν¨κ» μ€μ λΌ μλ€. ENOMEM
- μ§μ ν λ©λͺ¨λ¦¬κ° (λλ κ·Έ μΌλΆκ°) λ§΅ λμ΄ μμ§ μλ€.
POSIX.1-2001, POSIX.1-2008.
리λ
μ€ 1.3.21μμ μ΄ νΈμΆμ΄ λμ
νμ λλ ENOMEM
λμ EFAULT
λ₯Ό μΌλ€. 리λ
μ€ 2.4.19μμ POSIX κ°μΈ ENOMEM
μΌλ‘ λ°λμλ€.
msync()
κ° μ¬μ© κ°λ₯ν POSIX μμ€ν
μλ <unistd.h>
μ _POSIX_MAPPED_FILES
μ _POSIX_SYNCHRONIZED_IO
κ° 0λ³΄λ€ ν° κ°μΌλ‘ μ μλμ΄ μλ€. (sysconf(3)λ μ°Έκ³ .)
POSIXμ λ°λ₯΄λ©΄ flags
μ MS_SYNC
μ MS_ASYNC
μ€ νλλ₯Ό μ§μ ν΄μΌ νλ©° μ€μ λ‘ μΌλΆ μμ€ν
μμλ κ·Έ νλκ·Έλ€ μ€ νλλ₯Ό ν¬ν¨μν€μ§ μμΌλ©΄ msync()
κ° μ€ν¨νκ² λλ€. νμ§λ§ 리λ
μ€μμλ λ μ€ μ΄λ μͺ½λ μ§μ νμ§ μμ msync()
νΈμΆμ νμ©νλ©°, κ·Έ (νμ¬) μλ―Έλ MS_ASYNC
λ₯Ό μ§μ ν κ²κ³Ό λλ±νλ€. (리λ
μ€ 2.6.19λΆν°λ 컀λμμ λ³κ²½ νμ΄μ§λ€μ μ¬λ°λ‘ μΆμ ν΄μ νμνλ©΄ μ μ₯μλ‘ λ΄λ € μ£ΌκΈ° λλ¬Έμ MS_ASYNC
κ° μ€μ λ‘λ no-opμ΄λ€.) κ·Έλ° λ¦¬λ
μ€μ λμ λ°©μμλ λΆκ΅¬νκ³ , μ΄μ κ°λ₯νκ³ λ―Έλλ₯Ό λλΉνλ μμ©μμλ flags
μ MS_SYNC
μ MS_ASYNC
μ€ νλλ₯Ό κΌ μ§μ ν΄μΌ ν κ²μ΄λ€.
B.O. Gallmeister, POSIX.4, O.Reilly, 128-129μͺ½ λ° 389-391μͺ½.
2017-09-15