Anda tidak dapat memiliki kernel yang hanya memberi tahu Anda tentang perubahan ke jalur tertentu. Alasannya agak halus:
Di Linux, objek file ada secara independen dari nama apa pun yang dimilikinya. Nama-nama file sebenarnya adalah atribut direktori yang mengandungnya, dan satu file dapat dipanggil dengan beberapa nama (lihat, hardlinking).
Kernel harus memiliki sesuatu untuk dilampirkan objek inotify; itu tidak bisa melampirkan objek ke pathname karena pathname bukan objek sistem file nyata; Anda harus melampirkan ke direktori induk atau file yang dijelaskan path. Tetapi Anda tidak dapat melampirkan ke file, karena Anda menonton untuk melihat apakah file dengan nama yang diberikan dibuat, bukan perubahan pada file yang diberikan.
Secara teoritis, kernel dapat mengimplementasikan API yang memungkinkan Anda memilih acara untuk pathname yang diberikan saat menambahkan arloji ke direktori, dengan cara yang sama memungkinkan Anda memilih jenis acara. Ini akan mengasapi API, dan kernel pada akhirnya akan memproses data yang sama dan melakukan perbandingan string yang sama dengan yang Anda lakukan di userspace.
Apakah ada kinerja yang nyata untuk menempatkan arloji di direktori yang sangat aktif? Saya tidak yakin seberapa aktif maksud Anda; puluhan file per detik, ratusan, jutaan?
Bagaimanapun, saya akan menghindari access
: itu selalu akan berlomba. File dapat dibuat dan dihapus di antara panggilan ke access
, dan memanggil access
dalam loop yang sangat ketat akan menjadi lambat, dan jenis masalah inotify
yang dirancang untuk dipecahkan.
access
denganF_OK
untuk melihat apakah sudah ada.