xref: /openbmc/dbus-sensors/src/FileHandle.hpp (revision 779c96a2)
1*e73bd0a1SAndrew Jeffery #pragma once
2*e73bd0a1SAndrew Jeffery 
3*e73bd0a1SAndrew Jeffery #include <filesystem>
4*e73bd0a1SAndrew Jeffery #include <ios>
5*e73bd0a1SAndrew Jeffery 
6*e73bd0a1SAndrew Jeffery // An RAII compliant object for holding a posix file descriptor
7*e73bd0a1SAndrew Jeffery class FileHandle
8*e73bd0a1SAndrew Jeffery {
9*e73bd0a1SAndrew Jeffery   private:
10*e73bd0a1SAndrew Jeffery     int fd;
11*e73bd0a1SAndrew Jeffery 
12*e73bd0a1SAndrew Jeffery   public:
13*e73bd0a1SAndrew Jeffery     FileHandle() = delete;
14*e73bd0a1SAndrew Jeffery     FileHandle(const FileHandle&) = delete;
15*e73bd0a1SAndrew Jeffery     FileHandle& operator=(const FileHandle&) = delete;
16*e73bd0a1SAndrew Jeffery     FileHandle(FileHandle&& /*in*/) noexcept;
17*e73bd0a1SAndrew Jeffery     FileHandle& operator=(FileHandle&& /*in*/) noexcept;
18*e73bd0a1SAndrew Jeffery 
19*e73bd0a1SAndrew Jeffery     explicit FileHandle(const std::filesystem::path& name,
20*e73bd0a1SAndrew Jeffery                         std::ios_base::openmode mode = std::ios_base::in |
21*e73bd0a1SAndrew Jeffery                                                        std::ios_base::out);
22*e73bd0a1SAndrew Jeffery 
23*e73bd0a1SAndrew Jeffery     explicit FileHandle(int fd);
24*e73bd0a1SAndrew Jeffery 
25*e73bd0a1SAndrew Jeffery     ~FileHandle();
26*e73bd0a1SAndrew Jeffery     int handle() const;
27*e73bd0a1SAndrew Jeffery };
28