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

NAME

fanotify_init - fanotify κ·Έλ£Ή λ§Œλ“€μ–΄μ„œ μ΄ˆκΈ°ν™” ν•˜κΈ°

SYNOPSIS

#include <fcntl.h>
#include <sys/fanotify.h>

int fanotify_init(unsigned int flags, unsigned int event_f_flags);

DESCRIPTION

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 μ°Έκ³ .)

RETURN VALUE

성곡 μ‹œ fanotify_init()은 μƒˆ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

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 μ—­λŠ₯이 μ—†μ–΄μ„œ λ™μž‘μ΄ ν—ˆκ°€λ˜μ§€ μ•ŠλŠ”λ‹€.

VERSIONS

λ¦¬λˆ…μŠ€ 컀널 버전 2.6.36μ—μ„œ fanotify_init()이 λ„μž…λ˜μ—ˆκ³  버전 2.6.37μ—μ„œ ν™œμ„±ν™”λ˜μ—ˆλ‹€.

CONFORMING TO

이 μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ λ¦¬λˆ…μŠ€ μ „μš©μ΄λ‹€.

BUGS

λ¦¬λˆ…μŠ€ 컀널 버전 3.18 전에 λ‹€μŒ 버그가 μžˆμ—ˆλ‹€.

  • event_f_flags에 O_CLOEXECλ₯Ό μ£Όλ©΄ λ¬΄μ‹œν•œλ‹€.

λ¦¬λˆ…μŠ€ 컀널 버전 3.14 전에 λ‹€μŒ 버그가 μžˆμ—ˆλ‹€.

  • event_f_flags에 μœ νš¨ν•˜μ§€ μ•Šμ€ ν”Œλž˜κ·Έκ°€ μžˆλŠ”μ§€ κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ”λ‹€. FMODE_EXEC처럼 λ‚΄λΆ€ μš©λ„λ‘œλ§Œ μ“°λŠ” ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•  수 있으며, 그러면 fanotify 파일 λ””μŠ€ν¬λ¦½ν„° 읽기가 λ°˜ν™˜ν•˜λŠ” 파일 λ””μŠ€ν¬λ¦½ν„°μ— 섀정이 λœλ‹€.

SEE ALSO

fanotify_mark(2), fanotify(7)


2019-08-02

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