#pragma once #include #include #include #include #include #include class VMObject; class SharedMemory : public File { public: static KResultOr> open(const String& name, int flags, mode_t); static KResult unlink(const String& name); virtual ~SharedMemory() override; String name() const { return m_name; } KResult truncate(off_t); VMObject* vmo() { return m_vmo.ptr(); } const VMObject* vmo() const { return m_vmo.ptr(); } uid_t uid() const { return m_uid; } gid_t gid() const { return m_gid; } private: // ^File virtual bool can_read(FileDescriptor&) const override { return true; } virtual bool can_write(FileDescriptor&) const override { return true; } virtual int read(FileDescriptor&, byte*, int) override; virtual int write(FileDescriptor&, const byte*, int) override; virtual String absolute_path(FileDescriptor&) const override; virtual const char* class_name() const override { return "SharedMemory"; } virtual bool is_shared_memory() const override { return true; } SharedMemory(const String& name, uid_t, gid_t, mode_t); String m_name; uid_t m_uid { 0 }; gid_t m_gid { 0 }; mode_t m_mode { 0 }; RetainPtr m_vmo; };