/* * Copyright (c) 2020, Sergey Bugaev * Copyright (c) 2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace IPC { class File { AK_MAKE_NONCOPYABLE(File); public: File() = default; static File adopt_file(NonnullOwnPtr file); static File adopt_fd(int fd); static ErrorOr clone_fd(int fd); File(File&& other); File& operator=(File&& other); ~File(); int fd() const { return m_fd; } // This is 'const' since generated IPC messages expose all parameters by const reference. [[nodiscard]] int take_fd() const { return exchange(m_fd, -1); } ErrorOr clear_close_on_exec(); private: explicit File(int fd); mutable int m_fd { -1 }; }; }