Saya mengembangkan perangkat lunak yang akan menggunakan inotify untuk melacak perubahan pada sejumlah besar file (puluhan hingga ratusan ribu file). Saya telah menemukan ide-ide ini:
- satu jam tangan per file
- satu jam tangan per direktori induk
- hindari pemberitahuan dan pindai fs secara berkala untuk mengetahui perubahan (tidak disukai)
Saya akan memiliki database semua file yang saya tonton dan beberapa informasi stat dasar (seperti mtime dan ukuran), namun, saya harus membuat stat setiap file di direktori itu sampai saya menemukan file yang berubah.
Mana yang lebih cepat, berton-ton (100.000+) jam tangan tanpa pemberitahuan atau berton-ton panggilan statistik?
Menurut saya, mengurangi jumlah panggilan stat akan lebih baik, tetapi saya tidak cukup tahu tentang inotify.
Catatan:
Ini akan berjalan di workstation, bukan server. Tujuan utamanya adalah untuk menyinkronkan perubahan (berpotensi ke seluruh sistem file) antara klien dan server jauh.
Jawaban yang Diterima:
Saat Anda read()
fd inotify, name
field dari struct yang dikembalikan memberi tahu Anda file mana yang dimodifikasi relatif terhadap direktori yang sedang ditonton, jadi Anda tidak perlu membuat stat setiap file dalam direktori setelah kejadian.
Lihat http://linux.die.net/man/7/inotify
Khususnya:
struct inotify_event { int wd; /* Watch descriptor */ uint32_t mask; /* Mask of events */ uint32_t cookie; /* Unique cookie associating related events (for rename(2)) */ uint32_t len; /* Size of 'name' field */ char name[]; /* Optional null-terminated name */ };
Bidang nama hanya ada saat kejadian dikembalikan untuk file
di dalam direktori yang diawasi; itu mengidentifikasi nama path file relatif
ke direktori yang ditonton. Nama path ini diakhiri dengan null, dan dapat
menyertakan byte null lebih lanjut untuk menyelaraskan pembacaan berikutnya ke batas alamat
yang sesuai.