Bạn không thể có kernel chỉ thông báo cho bạn về một thay đổi đối với một đường dẫn nhất định. Những lý do hơi tinh tế:
Trong Linux, một đối tượng tệp tồn tại độc lập với bất kỳ tên nào mà nó có thể có. Tên của tệp thực sự là thuộc tính của thư mục chứa của chúng và một tệp có thể được gọi bằng nhiều tên (xem, liên kết cứng).
Nhân phải có một cái gì đó để gắn các đối tượng inotify vào; nó không thể đính kèm một đối tượng vào một tên đường dẫn vì một tên đường dẫn không phải là một đối tượng hệ thống tập tin thực sự; bạn phải đính kèm vào thư mục mẹ hoặc tệp mà đường dẫn mô tả. Nhưng bạn không thể đính kèm vào tệp, bởi vì bạn đang xem để xem liệu một tệp có tên đã cho có được tạo không, không thay đổi thành tệp đã cho.
Về mặt lý thuyết, hạt nhân có thể triển khai API cho phép bạn chọn các sự kiện cho một tên đường dẫn cụ thể khi thêm đồng hồ vào thư mục, giống như cách nó cho phép bạn chọn các loại sự kiện. Điều này sẽ làm phình to API và cuối cùng, hạt nhân sẽ xử lý cùng một dữ liệu và thực hiện cùng một chuỗi so sánh bạn sẽ làm trong không gian người dùng.
Có một hiệu suất đáng chú ý để đặt một chiếc đồng hồ trên một thư mục rất tích cực? Tôi không chắc bạn có ý nghĩa như thế nào; Hàng chục tập tin một giây, hàng trăm, hàng triệu?
Trong mọi trường hợp, tôi sẽ tránh access
: nó sẽ luôn luôn là cuộc đua. Một tập tin có thể được tạo và loại bỏ giữa các cuộc gọi đến access
và việc gọi access
trong một vòng lặp rất chặt chẽ sẽ bị chậm và là loại vấn đề inotify
được thiết kế để giải quyết.
access
vớiF_OK
để xem nếu nó tồn tại được nêu ra.