1 #pragma once 2 3 #include <unistd.h> 4 namespace phosphor 5 { 6 namespace gpio 7 { 8 /** @class FileDescriptor 9 * @brief Responsible for handling file descriptor 10 */ 11 class FileDescriptor 12 { 13 private: 14 /** @brief File descriptor for the gpio input device */ 15 int fd = -1; 16 17 public: 18 FileDescriptor() = default; 19 FileDescriptor(const FileDescriptor&) = delete; 20 FileDescriptor& operator=(const FileDescriptor&) = delete; 21 FileDescriptor(FileDescriptor&&) = delete; 22 FileDescriptor& operator=(FileDescriptor&&) = delete; 23 24 /** @brief Saves File descriptor and uses it to do file operation 25 * 26 * @param[in] fd - File descriptor 27 */ 28 FileDescriptor(int fd) : fd(fd) 29 { 30 // Nothing 31 } 32 33 ~FileDescriptor() 34 { 35 if (fd >= 0) 36 { 37 close(fd); 38 } 39 } 40 41 int operator()() 42 { 43 return fd; 44 } 45 46 operator bool() const 47 { 48 return fd != -1; 49 } 50 51 void set(int descriptor) 52 { 53 fd = descriptor; 54 } 55 }; 56 57 } // namespace gpio 58 } // namespace phosphor 59