fanotify_init(2) - wariua/manpages-ko GitHub Wiki
fanotify_init - fanotify κ·Έλ£Ή λ§λ€μ΄μ μ΄κΈ°ν νκΈ°
#include <fcntl.h>
#include <sys/fanotify.h>
int fanotify_init(unsigned int flags, unsigned int event_f_flags);
fanotify APIμ λν μκ°λ fanotify(7)λ₯Ό 보λΌ.
fanotify_init()
μ μ fanotify κ·Έλ£Ήμ μ΄κΈ°ν νκ³ κ·Έλ£Ήμ μ°κ³λ μ΄λ²€νΈ νμ λν νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ°ννλ€.
κ·Έ νμΌ λμ€ν¬λ¦½ν°λ₯Ό fanotify_mark(2) νΈμΆμ μ¬μ©ν΄μ fanotify μ΄λ²€νΈκ° λ°μν νμΌ, λλ ν°λ¦¬, λ§μ΄νΈ, νμΌ μμ€ν μ μ§μ νλ€. κ·Έλ¦¬κ³ νμΌ λμ€ν¬λ¦½ν°μ μ½κΈ°λ₯Ό ν΄μ κ·Έ μ΄λ²€νΈλ₯Ό μ½λλ€. μ΄λ€ μ΄λ²€νΈλ μ 보λ₯Ό μ£ΌκΈ°λ§ νλ©° νμΌμ μ κ·Όμ΄ μ΄λ€μ‘μμ λνλΈλ€. λ€λ₯Έ μ΄λ²€νΈλ λ€λ₯Έ μμ©μ΄ νμΌμ΄λ λλ ν°λ¦¬μ μ κ·Όν μ μλμ§ κ²°μ νλ λ° μΈ μ μλ€. νμΌ λμ€ν¬λ¦½ν°μ μ°κΈ°λ₯Ό ν΄μ κ·Έ νμΌ μμ€ν κ°μ²΄μ λν μ κ·Όμ μΈκ°νλ€.
μ¬λ¬ νλ‘κ·Έλ¨μ΄ fanotify μΈν°νμ΄μ€λ‘ κ°μ νμΌμ λμμ κ°μν μλ μλ€.
νμ¬ κ΅¬νμμ μ¬μ©μλ³ fanotify κ·Έλ£Ή μλ 128κ°λ‘ μ νλΌ μλ€. μ΄ μ νμ 무μν μ μλ€.
fanotify_init()
νΈμΆμ μν΄μ CAP_SYS_ADMIN
μλ₯μ΄ νμνλ€. API ν₯ν λ²μ μμλ μ΄ μ μ½μ΄ μνλ μλ μλ€. κ·Έλμ μλμμ 보μ΄λ κ²μ²λΌ μ΄λ€ μλ₯ κ²μ¬λ€μ΄ μΆκ°λ‘ ꡬνλΌ μλ€.
flags
μΈμλ μ²μ·¨ μμ©μ μλ¦Ό λ±κΈμ μ§μ νλ λΉνΈ νλμ νμΌ λμ€ν¬λ¦½ν°μ λμ λ°©μμ μ§μ νλ λΉνΈ νλλ€μ λ΄κ³ μλ€.
νκ° μ΄λ²€νΈλ₯Ό λ£λ μ²μ·¨μκ° μ¬λΏ μ‘΄μ¬νλ κ²½μ° μλ¦Ό λ±κΈμ μ΄μ©ν΄ μ΄λ²€νΈλ₯Ό μμ νλ μμλ₯Ό μ νλ€.
flags
μ λ€μ μλ¦Ό λ±κΈλ€ μ€ νλλ₯Ό μ§μ ν μ μλ€.
FAN_CLASS_PRE_CONTENT
- μ΄ κ°μ νμΌμ μ κ·Όμ΄ μ΄λ€μ‘μμ μ리λ μ΄λ²€νΈμ νμΌμ μ κ·Όν μ μλλ νκ° κ²°μ μ΄λ²€νΈλ₯Ό μμ νλλ‘ νλ€. νμΌμ μ΅μ’ λ΄μ©λ¬Όμ΄ λ΄κΈ°κΈ° μ μ μ κ·Όν΄μΌ νλ μ²μ·¨μλ₯Ό μν κ²μ΄λ€. μλ₯Ό λ€λ©΄ κ³μΈ΅ μ μ₯μ κ΄λ¦¬μμμ μ΄ μλ¦Ό λ±κΈμ μ¬μ©ν μ μμ κ²μ΄λ€.
FAN_CLASS_CONTENT
- μ΄ κ°μ νμΌμ μ κ·Όμ΄ μ΄λ€μ‘μμ μ리λ μ΄λ²€νΈμ νμΌμ μ κ·Όν μ μλλ νκ° κ²°μ μ΄λ²€νΈλ₯Ό μμ νλλ‘ νλ€. νμΌμ μ΅μ’ λ΄μ©λ¬Όμ΄ μ΄λ―Έ λ΄κ²¨ μμ λ μ κ·Όν΄μΌ νλ μ²μ·¨μλ₯Ό μν κ²μ΄λ€. μλ₯Ό λ€μ΄ λ©μ¨μ΄ νμ§ νλ‘κ·Έλ¨μμ μ΄ μλ¦Ό λ±κΈμ μ¬μ©ν μ μμ κ²μ΄λ€.
-
FAN_REPORT_FID
(리λ μ€ 5.1λΆν°) - μ΄ κ°μ μ΄λ²€νΈμ μ°κ΄λ νμ νμΌ μμ€ν
κ°μ²΄μ λν μΆκ° μ 보λ₯Ό λ΄μ μ΄λ²€νΈλ₯Ό μμ νλλ‘ νλ€. λ λ€λ₯Έ κ΅¬μ‘°μ²΄κ° κ°μ²΄μ λν μ 보λ₯Ό λ΄κ³ μ λ²μ© μ΄λ²€νΈ λ©νλ°μ΄ν° ꡬ쑰체μ ν¨κ» ν¬ν¨λΌ μλ€. κ·Έλ¦¬κ³ μ΄λ²€νΈμ μ°κ΄λ κ°μ²΄λ₯Ό λνλ΄λ λ° μ°λ νμΌ λμ€ν¬λ¦½ν°λ νμΌ νΈλ€λ‘ κ΅μ²΄λλ€. μ΄λ νμΌ λμ€ν¬λ¦½ν° λμ νμΌ νΈλ€μ μ°λ©΄ κ°μ²΄λ₯Ό λ μ½κ² μλ³ν μ μλ μμ©λ€μ μν κ²μ΄λ€. λν
FAN_CREATE
,FAN_ATTRIB
,FAN_MOVE
,FAN_DELETE
λ±κ³Ό κ°μ λλ ν°λ¦¬ νλͺ© μ΄λ²€νΈμ κ΄μ¬ μλ μμ©λ€μμλ μ΄μ©ν μ μλ€. μ°Έκ³ λ‘ λ§μ΄νΈ μ§μ μ κ°μν λ λλ ν°λ¦¬ λ³κ²½ μ΄λ²€νΈ μ¬μ©μ μ§μνμ§ μλλ€. λFAN_CLASS_CONTENT
λFAN_CLASS_PRE_CONTENT
λ₯Ό μ΄ νλκ·Έμ ν¨κ» μ°μ§ λͺ»νλ©° κ·Έλ κ² νλ©΄EINVAL
μ€λ₯κ° λ°μνλ€. μμΈν λ΄μ©μ fanotify(7) μ°Έκ³ . FAN_CLASS_NOTIF
- κΈ°λ³Έκ°μ΄λ€. λ°λ‘ μ§μ νμ§ μμλ λλ€. μ΄ κ°μ νμΌμ μ κ·Όμ΄ μ΄λ€μ‘μμ μ리λ μ΄λ²€νΈλ§ μμ νλλ‘ νλ€. νμΌ μ κ·Ό μ μ νκ° κ²°μ μ λΆκ°λ₯νλ€.
μλ¦Ό λ±κΈμ΄ λ€λ₯Έ μ²μ·¨μλ€μ FAN_CLASS_PRE_CONTENT
, FAN_CLASS_CONTENT
, FAN_CLASS_NOTIF
μμλ‘ μ΄λ²€νΈλ₯Ό λ°κ² λλ€. μλ¦Ό λ±κΈμ΄ κ°μ μ²μ·¨μλ€μ λν μλ¦Ό μμλ κ·μ λΌ μμ§ μλ€.
flags
μ μΆκ°λ‘ λ€μ λΉνΈλ€μ μ€μ ν μ μλ€.
FAN_CLOEXEC
- μ νμΌ λμ€ν¬λ¦½ν°μ 'execμμ λ«κΈ°' νλκ·Έ(
FD_CLOEXEC
)λ₯Ό μ€μ νλ€. open(2)μO_CLOEXEC
νλκ·Έ μ€λͺ μ 보λΌ. FAN_NONBLOCK
- νμΌ λμ€ν¬λ¦½ν°μ λ
ΌλΈλ‘νΉ νλκ·Έ(
O_NONBLOCK
)λ₯Ό μΌ λ€. νμΌ λμ€ν¬λ¦½ν°μμ μ½κΈ°κ° λΈλ‘ νμ§ μκ² λλ€. μ½μ μ μλ λ°μ΄ν°κ° μμΌλ©΄ λμread(2)
κ°EAGAIN
μ€λ₯λ‘ μ€ν¨νλ€. FAN_UNLIMITED_QUEUE
- μ΄λ²€νΈ νμμ 16384κ° μ΄λ²€νΈ μ νμ μμ€λ€. μ΄ νλκ·Έλ₯Ό μ¬μ©νλ €λ©΄
CAP_SYS_ADMIN
μλ₯μ΄ νμνλ€. FAN_UNLIMITED_MARKS
- 8192κ° νμ μ νμ μμ€λ€. μ΄ νλκ·Έλ₯Ό μ¬μ©νλ €λ©΄
CAP_SYS_ADMIN
μλ₯μ΄ νμνλ€. -
FAN_REPORT_TID
(리λ μ€ 4.20λΆν°) -
read(2)
κ° λ΄λλstruct fanotify_event_metadata
(fanotify(7) μ°Έκ³ )μpid
νλλ‘ νλ‘μΈμ€ ID(PID) λμ μ€λ λ ID(TID)λ₯Ό μλ € μ€λ€.
event_f_flags
μΈμλ fanotify μ΄λ²€νΈμ λν΄ μμ±λλ μ΄λ¦° νμΌ κΈ°μ νλͺ©μ μ€μ ν νμΌ μν νλκ·Έλ₯Ό μ§μ νλ€. μ΄ νλκ·Έλ€μ λν μμΈν λ΄μ©μ open(2)μ flags
κ° μ€λͺ
μ 보λΌ. event_f_flags
μλ μ κ·Ό λͺ¨λλ₯Ό μν λΉνΈ νλκ° ν¬ν¨λλ€. κ·Έ νλμ λ€μ κ°μ΄ λ€μ΄κ° μ μλ€.
O_RDONLY
- μ½κΈ° μ κ·Όλ§ νμ©νλ€.
O_WRONLY
- μ°κΈ° μ κ·Όλ§ νμ©νλ€.
O_RDWR
- μ½κΈ° λ° μ°κΈ° μ κ·Όμ νμ©νλ€.
event_f_flags
μ λ€λ₯Έ λΉνΈλ€μ μ€μ ν μ μλ€. νΉν μ μ©ν κ°λ€μ λ€μκ³Ό κ°λ€.
O_LARGEFILE
- 2GB μ΄κ³Ό νμΌ μ§μμ μΌ λ€. μ΄ νλκ·Έλ₯Ό μ€μ νμ§ μμΌλ©΄ 32λΉνΈ μμ€ν
μμ fanotify κ·Έλ£ΉμΌλ‘ κ°μνλ ν° νμΌμ μ΄λ €κ³ ν λ
EOVERFLOW
μ€λ₯κ° λ°μνκ² λλ€. -
O_CLOEXEC
(리λ μ€ 3.18λΆν°) - νμΌ λμ€ν¬λ¦½ν°μ 'execμμ λ«κΈ°' νλκ·Έλ₯Ό μΌ λ€. μ΄κ² μ μ©ν μ μλ μ΄μ μ λν΄μ open(2)μ
O_CLOEXEC
νλκ·Έ μ€λͺ μ 보λΌ.
O_APPEND
, O_DSYNC
, O_NOATIME
, O_NONBLOCK
, O_SYNC
λ μ¬μ© κ°λ₯νλ€. event_f_flags
μ κ·Έ μΈ λ€λ₯Έ νλκ·Έλ₯Ό μ§μ νλ©΄ EINVAL
μ€λ₯κ° μκΈ΄λ€. (νμ§λ§ BUGS μ°Έκ³ .)
μ±κ³΅ μ fanotify_init()
μ μ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EINVAL
-
flags
λevent_f_flags
μ μ ν¨νμ§ μμ κ°μ 쀬λ€.FAN_ALL_INIT_FLAGS
(리λ μ€ μ»€λ λ²μ 4.20λΆν° νκΈ° μμ μν)κ°flags
μ κ°λ₯ν λͺ¨λ λΉνΈλ€μ΄λ€. EMFILE
- μ΄ μ¬μ©μμ μλ¦Ό κ·Έλ£Ή μκ° 128κ°λ₯Ό μ΄κ³Όνλ€.
EMFILE
- μ΄λ¦° νμΌ λμ€ν¬λ¦½ν° κ°μμ λν νλ‘μΈμ€λ³ μ νμ λλ¬νλ€.
ENOMEM
- μλ¦Ό κ·Έλ£Ήμ μν λ©λͺ¨λ¦¬ ν λΉμ μ€ν¨νλ€.
ENOSYS
- 컀λμμ
fanotify_init()
μ ꡬννκ³ μμ§ μλ€. 컀λμCONFIG_FANOTIFY
λ‘ κ΅¬μ±ν κ²½μ°μλ§ fanotify APIλ₯Ό μΈ μ μλ€. EPERM
- νΈμΆμμκ²
CAP_SYS_ADMIN
μλ₯μ΄ μμ΄μ λμμ΄ νκ°λμ§ μλλ€.
리λ
μ€ μ»€λ λ²μ 2.6.36μμ fanotify_init()
μ΄ λμ
λμκ³ λ²μ 2.6.37μμ νμ±νλμλ€.
μ΄ μμ€ν νΈμΆμ 리λ μ€ μ μ©μ΄λ€.
리λ μ€ μ»€λ λ²μ 3.18 μ μ λ€μ λ²κ·Έκ° μμλ€.
-
event_f_flags
μO_CLOEXEC
λ₯Ό μ£Όλ©΄ 무μνλ€.
리λ μ€ μ»€λ λ²μ 3.14 μ μ λ€μ λ²κ·Έκ° μμλ€.
-
event_f_flags
μ μ ν¨νμ§ μμ νλκ·Έκ° μλμ§ κ²μ¬νμ§ μλλ€.FMODE_EXEC
μ²λΌ λ΄λΆ μ©λλ‘λ§ μ°λ νλκ·Έλ₯Ό μ€μ ν μ μμΌλ©°, κ·Έλ¬λ©΄ fanotify νμΌ λμ€ν¬λ¦½ν° μ½κΈ°κ° λ°ννλ νμΌ λμ€ν¬λ¦½ν°μ μ€μ μ΄ λλ€.
2019-08-02