InodeWatcher.h 1020 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include <AK/Badge.h>
  3. #include <AK/CircularQueue.h>
  4. #include <AK/WeakPtr.h>
  5. #include <Kernel/FileSystem/File.h>
  6. class Inode;
  7. class InodeWatcher final : public File {
  8. public:
  9. static NonnullRefPtr<InodeWatcher> create(Inode&);
  10. virtual ~InodeWatcher() override;
  11. struct Event {
  12. enum class Type {
  13. Invalid = 0,
  14. Modified,
  15. };
  16. Type type { Type::Invalid };
  17. };
  18. virtual bool can_read(FileDescription&) const override;
  19. virtual bool can_write(FileDescription&) const override;
  20. virtual ssize_t read(FileDescription&, u8*, ssize_t) override;
  21. virtual ssize_t write(FileDescription&, const u8*, ssize_t) override;
  22. virtual String absolute_path(const FileDescription&) const override;
  23. virtual const char* class_name() const override { return "InodeWatcher"; };
  24. void notify_inode_event(Badge<Inode>, Event::Type);
  25. private:
  26. explicit InodeWatcher(Inode&);
  27. WeakPtr<Inode> m_inode;
  28. CircularQueue<Event, 32> m_queue;
  29. };