FIFO.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #pragma once
  2. #include <Kernel/DoubleBuffer.h>
  3. #include <Kernel/UnixTypes.h>
  4. #include <Kernel/File.h>
  5. class FileDescriptor;
  6. class FIFO final : public File {
  7. public:
  8. enum Direction {
  9. Neither, Reader, Writer
  10. };
  11. static RetainPtr<FIFO> from_fifo_id(dword);
  12. static Retained<FIFO> create(uid_t);
  13. virtual ~FIFO() override;
  14. uid_t uid() const { return m_uid; }
  15. Retained<FileDescriptor> open_direction(Direction);
  16. void attach(Direction);
  17. void detach(Direction);
  18. private:
  19. // ^File
  20. virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override;
  21. virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override;
  22. virtual bool can_read(FileDescriptor&) const override;
  23. virtual bool can_write(FileDescriptor&) const override;
  24. virtual String absolute_path(FileDescriptor&) const override;
  25. virtual const char* class_name() const override { return "FIFO"; }
  26. virtual bool is_fifo() const override { return true; }
  27. explicit FIFO(uid_t);
  28. unsigned m_writers { 0 };
  29. unsigned m_readers { 0 };
  30. DoubleBuffer m_buffer;
  31. uid_t m_uid { 0 };
  32. };