fanotify_mark(2) - wariua/manpages-ko GitHub Wiki
fanotify_mark - νμΌ μμ€ν κ°μ²΄μ λν fanotify νμ μΆκ°, μ κ±°, λ³κ²½νκΈ°
#include <sys/fanotify.h>
int fanotify_mark(int fanotify_fd, unsigned int flags,
uint64_t mask, int dirfd, const char *pathname);fanotify APIμ λν μκ°λ fanotify(7)λ₯Ό 보λΌ.
fanotify_mark()λ νμΌ μμ€ν
κ°μ²΄μ fanotify νμλ₯Ό μΆκ°νκ±°λ μ κ±°νκ±°λ λ³κ²½νλ€. νμλ₯Ό νλ νμΌ μμ€ν
κ°μ²΄μ λν΄ νΈμΆμκ° μ½κΈ° κΆνμ κ°μ§κ³ μμ΄μΌ νλ€.
fanotify_fd μΈμλ fanotify_init(2)μ΄ λ°νν νμΌ λμ€ν¬λ¦½ν°μ΄λ€.
flagsλ μνν λ³κ²½ λμμ κΈ°μ νλ λΉνΈ λ§μ€ν¬μ΄λ€. λ€μ κ°λ€ μ€ μ νν νλλ₯Ό ν¬ν¨ν΄μΌ νλ€.
FAN_MARK_ADD- νμ λ§μ€ν¬μ (λλ 무μ λ§μ€ν¬μ)
maskμ μ΄λ²€νΈλ€μ μΆκ°νλ€.maskκ° λΉμ΄ μμ§ μμμΌ νλ©°, μ κ·Έλ¬λ©΄EINVALμ€λ₯κ° λ°μνλ€. FAN_MARK_REMOVE- νμ λ§μ€ν¬μμ (λλ 무μ λ§μ€ν¬μμ)
maskμΈμμ μ΄λ²€νΈλ€μ μ κ±°νλ€.maskκ° λΉμ΄ μμ§ μμμΌ νλ©°, μ κ·Έλ¬λ©΄EINVALμ€λ₯κ° λ°μνλ€. FAN_MARK_FLUSH- fanotify κ·Έλ£Ήμμ λͺ¨λ νμΌ μμ€ν
νμ, λλ λͺ¨λ λ§μ΄νΈ νμ, λλ λͺ¨λ λλ ν°λ¦¬ λ° νμΌ νμλ₯Ό μ κ±°νλ€.
flagsμFAN_MARK_MOUNTκ° μμΌλ©΄ κ·Έλ£Ήμμ λ§μ΄νΈμ λν νμλ€μ λͺ¨λ μ κ±°νλ€.flagsμFAN_MARK_FILESYSTEMμ΄ μμΌλ©΄ κ·Έλ£Ήμμ νμΌ μμ€ν μ λν νμλ€μ λͺ¨λ μ κ±°νλ€. κ·Έλ μ§ μμΌλ©΄ λλ ν°λ¦¬ λ° νμΌμ λν νμλ€μ λͺ¨λ μ κ±°νλ€.FAN_MARK_MOUNTμFAN_MARK_FILESYSTEMμΈμ νλκ·Έλ λ νλκ·Έ λͺ¨λλ₯ΌFAN_MARK_FLUSHμ ν¨κ» μ¬μ©ν μ μλ€.maskλ 무μνλ€.
μ κ°λ€ μ€ μ무κ²λ μ§μ νμ§ μκ±°λ μ¬λ¬ κ°μ§λ₯Ό μ§μ νλ©΄ νΈμΆμ΄ EINVAL μ€λ₯λ‘ μ€ν¨νλ€.
μΆκ°λ‘ flagsμ λ€μ κ°λ€μ 0κ° μ΄μ OR ν μ μλ€.
FAN_MARK_DONT_FOLLOW-
pathnameμ΄ μ¬λ³Όλ¦ λ§ν¬μ΄λ©΄ κ°λ¦¬ν€λ νμΌμ΄ μλλΌ λ§ν¬ μ체μ νμλ₯Ό νλ€. (κΈ°λ³Έμ μΌλ‘fanotify_mark()λpathnameμ΄ μ¬λ³Όλ¦ λ§ν¬μ΄λ©΄ μμ°Έμ‘°λ₯Ό νλ€.) FAN_MARK_ONLYDIR- νμν νμΌ μμ€ν
κ°μ²΄κ° λλ ν°λ¦¬κ° μλλ©΄
ENOTDIRμ€λ₯λ₯Ό μ κΈ°νλ€. FAN_MARK_MOUNT-
pathnameμΌλ‘ μ§μ ν λ§μ΄νΈ μ§μ μ νμλ₯Ό νλ€.pathnameμμ²΄κ° λ§μ΄νΈ μ§μ μ΄ μλλ©΄pathnameμ λ΄μ λ§μ΄νΈ μ§μ μ νμλ₯Ό νκ² λλ€. λ§μ΄νΈ μ§μ μ λͺ¨λ λλ ν°λ¦¬μ μλΈλλ ν°λ¦¬, κ·Έλ¦¬κ³ κ±°κΈ° λ΄κΈ΄ νμΌλ€μ κ°μνλ€. νμΌ λμ€ν¬λ¦½ν°fanotify_fdλ₯ΌFAN_REPORT_FIDνλκ·Έλ‘ μ΄κΈ°ν νκ±°λmaskμ μ λλ ν°λ¦¬ λ³κ²½ μ΄λ²€νΈλ₯Ό νλλΌλ μ€ κ²½μ°μλ μ΄ κ°μ μΈ μ μλ€. κ·Έλ κ² ν΄μ μλνλ©΄ μ€λ₯EINVALμ΄ λ°νλλ€. -
FAN_MARK_FILESYSTEM(리λ μ€ 4.20λΆν°) -
pathnameμΌλ‘ μ§μ ν νμΌ μμ€ν μ νμλ₯Ό νλ€.pathnameμ λ΄μ νμΌ μμ€ν μ νμλ₯Ό νκ² λλ€. λ§μ΄νΈ μ§μ μ΄ μ΄λλ κ·Έ νμΌ μμ€ν μ λ΄κΈ΄ λͺ¨λ νμΌκ³Ό λλ ν°λ¦¬λ₯Ό κ°μνλ€. FAN_MARK_IGNORED_MASK- 무μ λ§μ€ν¬μμ
maskμ μ΄λ²€νΈλ€μ μΆκ°νκ±°λ μ κ±°νλ€. FAN_MARK_IGNORED_SURV_MODIFY- 무μ λ§μ€ν¬κ° λ³κ²½ μ΄λ²€νΈλ₯Ό κ±°μΉλ©° μ μ§λλ€. μ΄ νλκ·Έκ° μ€μ λΌ μμ§ μμΌλ©΄ 무μνλ νμΌμ΄λ λλ ν°λ¦¬μ λ³κ²½ μ΄λ²€νΈκ° λ°μν λ κ·Έ 무μ λ§μ€ν¬λ₯Ό μμ€λ€.
maskλ μ΄λ€ μ΄λ²€νΈλ₯Ό μ²μ·¨ν μ§ (λλ 무μν μ§) μ§μ νλ€. λ€μ κ°λ€λ‘ μ΄λ€μ§ λΉνΈ λ§μ€ν¬μ΄λ€.
FAN_ACCESS- νμΌμ΄λ λλ ν°λ¦¬μ (BUGS μ°Έκ³ ) μ κ·Ό(μ½κΈ°)μ΄ μ΄λ€μ§λ©΄ μ΄λ²€νΈ μμ±.
FAN_MODIFY- νμΌμ΄ λ³κ²½(μ°κΈ°)λλ©΄ μ΄λ²€νΈ μμ±.
FAN_CLOSE_WRITE- μ°κΈ° κ°λ₯ νμΌμ΄ λ«νλ©΄ μ΄λ²€νΈ μμ±.
FAN_CLOSE_NOWRITE- μ½κΈ° μ μ© νμΌμ΄λ λλ ν°λ¦¬κ° λ«νλ©΄ μ΄λ²€νΈ μμ±.
FAN_OPEN- νμΌμ΄λ λλ ν°λ¦¬κ° μ΄λ¦¬λ©΄ μ΄λ²€νΈ μμ±.
-
FAN_OPEN_EXEC(리λ μ€ 5.0λΆν°) - νμΌμ΄ μ€ννλ €λ μλλ‘ μ΄λ¦¬λ©΄ μ΄λ²€νΈ μμ±. NOTESμ μΆκ° μ€λͺ μ°Έκ³ .
FAN_ATTRIB- νμΌμ΄λ λλ ν°λ¦¬μ λ©νλ°μ΄ν°κ° λ°λμμ λ μ΄λ²€νΈ μμ±.
FAN_CREATE- νμλ λΆλͺ¨ λλ ν°λ¦¬ λ΄μμ νμΌμ΄λ λλ ν°λ¦¬κ° μμ±λμ λ μ΄λ²€νΈ μμ±.
FAN_DELETE- νμλ λΆλͺ¨ λλ ν°λ¦¬ λ΄μμ νμΌμ΄λ λλ ν°λ¦¬κ° μμ λμ λ μ΄λ²€νΈ μμ±.
FAN_DELETE_SELF- νμλ νμΌμ΄λ λλ ν°λ¦¬ μμ²΄κ° μμ λμ λ μ΄λ²€νΈ μμ±.
FAN_MOVED_FROM- νμλ λΆλͺ¨ λλ ν°λ¦¬μ μλ νμΌμ΄λ λλ ν°λ¦¬κ° μ΄λλμ λ μ΄λ²€νΈ μμ±.
FAN_MOVED_TO- νμλ λΆλͺ¨ λλ ν°λ¦¬λ‘ νμΌμ΄λ λλ ν°λ¦¬κ° μ΄λλμ λ μ΄λ²€νΈ μμ±.
FAN_Q_OVERFLOW- μ΄λ²€νΈ ν λμΉ¨μ΄ λ°μνλ©΄ μ΄λ²€νΈ μμ±. fanotify_init(2)μμ
FAN_UNLIMITED_QUEUEλ₯Ό μ€μ νμ§ μμΌλ©΄ μ΄λ²€νΈ ν ν¬κΈ°κ° 16384κ° νλͺ©μΌλ‘ μ νλλ€. FAN_OPEN_PERM- νμΌμ΄λ λλ ν°λ¦¬ μ΄κΈ° μμ²μ΄ μμΌλ©΄ μ΄λ²€νΈ μμ±.
FAN_CLASS_PRE_CONTENTλFAN_CLASS_CONTENTλ‘ μμ±ν fanotify νμΌ λμ€ν¬λ¦½ν°κ° νμνλ€. -
FAN_OPEN_EXEC_PERM(리λ μ€ 5.0λΆν°) - μ€νμ μν νμΌ μ΄κΈ° μμ²μ΄ μμΌλ©΄ μ΄λ²€νΈ μμ±.
FAN_CLASS_PRE_CONTENTλFAN_CLASS_CONTENTλ‘ μμ±ν fanotify νμΌ λμ€ν¬λ¦½ν°κ° νμνλ€. NOTESμ μΆκ° μ€λͺ μ°Έκ³ . FAN_ACCESS_PERM- νμΌμ΄λ λλ ν°λ¦¬ μ½κΈ° μμ²μ΄ μμΌλ©΄ μ΄λ²€νΈ μμ±.
FAN_CLASS_PRE_CONTENTλFAN_CLASS_CONTENTλ‘ μμ±ν fanotify νμΌ λμ€ν¬λ¦½ν°κ° νμνλ€. FAN_ONDIR- λλ ν°λ¦¬μ λν΄ (κ°λ Ή opendir(3), readdir(3) (λ¨ BUGS μ°Έκ³ ), closedir(3)μ΄ νΈμΆλ λ) μ΄λ²€νΈ μμ±. μ΄ νλκ·Έκ° μμΌλ©΄ νμΌμ λν μ΄λ²€νΈλ§ μκΈ΄λ€. νμΌ λμ€ν¬λ¦½ν°
fanotify_fdλ₯ΌFAN_REPORT_FIDνλκ·Έλ‘ μ΄κΈ°ν νμ λλ§FAN_ONDIRνλκ·Έλ₯Ό λ³΄κ³ νλ€.FAN_CREATE,FAN_DELETE,FAN_MOVED_FROM,FAN_MOVED_TOκ°μ λλ ν°λ¦¬ νλͺ© μ΄λ²€νΈ λ§₯λ½μμ μλΈλλ ν°λ¦¬ νλͺ©λ€μ΄ λ³κ²½(μ¦ mkdir(2)/rmdir(2))λ λ μ΄λ²€νΈκ° μμ±λκ² νλ €λ©΄FAN_ONDIRνλκ·Έλ₯Ό μ§μ ν΄μΌ νλ€. μ΄ νλκ·Έλ μ΄λ²€νΈμμ λ¨λ μΌλ‘ λ³΄κ³ λλ μΌμ΄ μ λ μμΌλ©° νμ λ€λ₯Έ μ’ λ₯μ μ΄λ²€νΈμ ν¨κ» μ 곡λλ€. FAN_EVENT_ON_CHILD- νμν λλ ν°λ¦¬μ μ§μ μμλ€μ λν μ΄λ²€νΈλ₯Ό μμ±νλ€. λ§μ΄νΈ λ° νμΌ μμ€ν μ νμν λλ μ΄ νλκ·Έμ μ무 ν¨κ³Όκ° μλ€. μ°Έκ³ λ‘ νμν λλ ν°λ¦¬μ μλΈλλ ν°λ¦¬μ μμλ€μ λν΄μ μ΄λ²€νΈκ° μμ±λμ§ μλλ€. λλ ν°λ¦¬ νΈλ¦¬ μ 체λ₯Ό κ°μνλ €λ©΄ μ μ ν λ§μ΄νΈμ νμλ₯Ό ν΄μΌ νλ€.
λ€μ μ‘°ν© κ°μ΄ μ μλΌ μλ€.
FAN_CLOSE- νμΌμ΄ λ«νμ. (
FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE) FAN_MOVE- νμΌμ΄λ λλ ν°λ¦¬κ° μ΄λλμ. (
FAN_MOVED_FROM|FAN_MOVED_TO)
νμΌ λμ€ν¬λ¦½ν° dirfdμ pathnameμ μ§μ ν κ²½λ‘λͺ
μ μ¨μ νμλ₯Ό ν νμΌ μμ€ν
κ°μ²΄λ₯Ό κ²°μ νλ€.
-
pathnameμ΄ NULLμ΄λ©΄dirfdκ° νμν νμΌ μμ€ν κ°μ²΄λ₯Ό κ²°μ νλ€. -
pathnameμ΄ NULLμ΄κ³dirfdκ° νΉμ κ°AT_FDCWDμ΄λ©΄ νμ¬ μμ λλ ν°λ¦¬μ νμλ₯Ό νλ€. -
pathnameμ΄ μ λ κ²½λ‘μ΄λ©΄ νμν νμΌ μμ€ν κ°μ²΄λ₯Ό κ²°μ νλ©°,dirfdλ 무μλλ€. -
pathnameμ΄ μλ κ²½λ‘μ΄κ³dirfdμ κ°μ΄AT_FDCWDκ° μλλ©΄dirfdκ° κ°λ¦¬ν€λ λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘pathnameμ ν΄μν΄μ νμν νμΌ μμ€ν κ°μ²΄λ₯Ό κ²°μ νλ€. -
pathnameμ΄ μλ κ²½λ‘μ΄κ³dirfdμ κ°μ΄AT_FDCWDμ΄λ©΄ νμ¬ μμ λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘pathnameμ ν΄μν΄μ νμν νμΌ μμ€ν κ°μ²΄λ₯Ό κ²°μ νλ€.
μ±κ³΅ μ fanotify_mark()λ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errnoλ₯Ό μ€μ νλ€.
EBADF-
fanotify_fdλ‘ μ ν¨νμ§ μμ νμΌ λμ€ν¬λ¦½ν°λ₯Ό 쀬λ€. EINVAL-
flagsλmaskμ μ ν¨νμ§ μμ κ°μ 쀬λ€. λλfanotify_fdκ° fanotify νμΌ λμ€ν¬λ¦½ν°κ° μλλ€. EINVAL- fanotify νμΌ λμ€ν¬λ¦½ν°λ₯Ό
FAN_CLASS_NOTIFλFAN_REPORT_FIDλ‘ μ΄μλλ°maskμ νκ° μ΄λ²€νΈλ₯Ό μν νλκ·Έ(FAN_OPEN_PERMμ΄λFAN_ACCESS_PERM)κ° μλ€. ENOENT-
dirfdμpathnameμΌλ‘ λνλΈ νμΌ μμ€ν κ°μ²΄κ° μ‘΄μ¬νμ§ μλλ€. νμ μ λ κ°μ²΄μμ νμλ₯Ό μ κ±°νλ € ν λλ μ΄ μ€λ₯κ° μκΈ΄λ€. ENOMEM- νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉν μ μλ€.
ENOSPC- νμ κ°μκ° μ νκ°μΈ 8192κ°λ₯Ό μ΄κ³ΌνμΌλ©° fanotify_init(2)μΌλ‘ fanotify νμΌ λμ€ν¬λ¦½ν°λ₯Ό μμ±ν λ
FAN_UNLIMITED_MARKSνλκ·Έλ₯Ό μ§μ νμ§ μμλ€. ENOSYS- 컀λμμ
fanotify_mark()λ₯Ό ꡬννκ³ μμ§ μλ€. 컀λμCONFIG_FANOTIFYλ‘ κ΅¬μ±ν κ²½μ°μλ§ fanotify APIλ₯Ό μΈ μ μλ€. ENOTDIR-
flagsμFAN_MARK_ONLYDIRμ΄ μλλ°dirfdμpathnameμ΄ λλ ν°λ¦¬λ₯Ό λνλ΄μ§ μλλ€. EXDEV-
pathnameμ΄ κ°λ¦¬ν€λ νμΌ μμ€ν κ°μ²΄κ° λ£¨νΈ μνΌλΈλ‘κ³Ό λ€λ₯Έfsidλ₯Ό μ°λ νμΌ μμ€ν μλΈλ³Όλ₯¨μ μμΉν΄ μλ€. (μλ₯Ό λ€λ©΄btrfs(5).) fanotify_init(2)μ΄ λ°νν fanotify νμΌ λμ€ν¬λ¦½ν°λ₯ΌFAN_REPORT_FIDλ‘ μμ±νμ λλ§ μ΄ μ€λ₯κ° λ°νλ μ μλ€. ENODEV-
pathnameμ΄ κ°λ¦¬ν€λ νμΌ μμ€ν κ°μ²΄κ°fsidλ₯Ό μ§μνλ νμΌ μμ€ν μ μ°κ³λΌ μμ§ μλ€. (μλ₯Ό λ€λ©΄ tmpfs(5).) fanotify_init(2)μ΄ λ°νν fanotify νμΌ λμ€ν¬λ¦½ν°λ₯ΌFAN_REPORT_FIDλ‘ μμ±νμ λλ§ μ΄ μ€λ₯κ° λ°νλ μ μλ€. EOPNOTSUPP-
pathnameμ΄ κ°λ¦¬ν€λ κ°μ²΄κ° νμΌ νΈλ€ μΈμ½λ©μ μ§μνμ§ μλ νμΌ μμ€ν μ μ°κ³λΌ μλ€. fanotify_init(2)μ΄ λ°νν fanotify νμΌ λμ€ν¬λ¦½ν°λ₯ΌFAN_REPORT_FIDλ‘ μμ±νμ λλ§ μ΄ μ€λ₯κ° λ°νλ μ μλ€.
리λ
μ€ μ»€λ λ²μ 2.6.36μμ fanotify_mark()κ° λμ
λμκ³ λ²μ 2.6.37μμ νμ±νλμλ€.
μ΄ μμ€ν νΈμΆμ 리λ μ€ μ μ©μ΄λ€.
maskμ FAN_OPEN_EXECλ FAN_OPEN_EXEC_PERMλ₯Ό μ¬μ© μμλ νλ‘κ·Έλ¨ μ§μ μ€νμ΄ μ΄λ€μ§ λλ§ κ·Έ μ΄λ²€νΈλ€μ΄ λ°νλλ€. ꡬ체μ μΌλ‘ λ§ν΄ execve(2)λ execveat(2), uselib(2)λ‘ μ΄λ¦¬λ νμΌμ λν΄ κ·Έ μ΄λ²€νΈλ€μ΄ μμ±λλ€. μΈν°ν리ν°κ° μ€ν¬λ¦½νΈ νμΌμ μ λ¬λ°λ (λλ μ½μ΄ λ€μ΄λ) κ²½μ°μλ κ·Έ μ΄λ²€νΈλ€μ΄ μκΈ°μ§ μλλ€.
κ·Έλ¦¬κ³ λ¦¬λ μ€ λμ λ§μ»€μλ νμκ° λΌ μλ€λ©΄ execve(2)λ execveat(2)μ μ΄μ©ν΄ μ±κ³΅μ μΌλ‘ ELF μ€λΈμ νΈκ° μ΄λ¦΄ λλ μ΄λ²€νΈλ₯Ό λ°μ κ±Έ μμν΄μΌ νλ€.
μλ₯Ό λ€μ΄ λ€μ ELF λ°μ΄λ리λ₯Ό νΈμΆνλ € νκ³ /μ FAN_OPEN_EXEC νμλ₯Ό ν΄ λλ€κ³ νμ.
$ /bin/echo foo
μ΄ κ²½μ° μ΄λ²€νΈ μμ μμ©μ κ·Έ ELF λ°μ΄λ리μ μΈν°νλ¦¬ν° κ°κ°μ λν΄ FAN_OPEN_EXEC μ΄λ²€νΈλ₯Ό λ°κ² λλ€.
/bin/echo
/lib64/ld-linux-x86-64.so.2
리λ μ€ μ»€λ λ²μ 3.16 μ μ λ€μ λ²κ·Έλ€μ΄ μμλ€.
-
flagsμFAN_MARK_FLUSHκ° μλ κ²½μ° μ°μ§λ μλλ°dirfdμpathnameμ΄ μ ν¨ν νμΌ μμ€ν κ°μ²΄λ₯Ό λνλ΄μΌ νλ€. -
readdir(2)μ΄
FAN_ACCESSμ΄λ²€νΈλ₯Ό μμ±νμ§ μλλ€. -
fanotify_mark()λ₯ΌFAN_MARK_FLUSHλ‘ νΈμΆνλ κ²½μ°flagsκ°μ΄ μ ν¨νμ§ νμΈνμ§ μλλ€.
2019-08-02