1 #pragma once 2 3 #include <unistd.h> 4 namespace witherspoon 5 { 6 namespace power 7 { 8 namespace util 9 { 10 11 /** 12 * @class FileDescriptor 13 * 14 * Closes the file descriptor on destruction 15 */ 16 class FileDescriptor 17 { 18 public: 19 FileDescriptor() = default; 20 FileDescriptor(const FileDescriptor&) = delete; 21 FileDescriptor& operator=(const FileDescriptor&) = delete; 22 FileDescriptor(FileDescriptor&&) = delete; 23 FileDescriptor& operator=(FileDescriptor&&) = delete; 24 25 /** 26 * Constructor 27 * 28 * @param[in] fd - File descriptor 29 */ 30 FileDescriptor(int fd) : fd(fd) 31 { 32 } 33 34 ~FileDescriptor() 35 { 36 if (fd >= 0) 37 { 38 close(fd); 39 } 40 } 41 42 int operator()() 43 { 44 return fd; 45 } 46 47 operator bool() const 48 { 49 return fd != -1; 50 } 51 52 void set(int descriptor) 53 { 54 if (fd >= 0) 55 { 56 close(fd); 57 } 58 59 fd = descriptor; 60 } 61 62 private: 63 /** 64 * File descriptor 65 */ 66 int fd = -1; 67 }; 68 69 } // namespace util 70 } // namespace power 71 } // namespace witherspoon 72