1 //===-- PipePosix.h ---------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_HOST_POSIX_PIPEPOSIX_H 10 #define LLDB_HOST_POSIX_PIPEPOSIX_H 11 #if defined(__cplusplus) 12 13 #include "lldb/Host/PipeBase.h" 14 15 namespace lldb_private { 16 17 /// \class PipePosix PipePosix.h "lldb/Host/posix/PipePosix.h" 18 /// A posix-based implementation of Pipe, a class that abtracts 19 /// unix style pipes. 20 /// 21 /// A class that abstracts the LLDB core from host pipe functionality. 22 class PipePosix : public PipeBase { 23 public: 24 static int kInvalidDescriptor; 25 26 PipePosix(); 27 PipePosix(lldb::pipe_t read, lldb::pipe_t write); 28 PipePosix(const PipePosix &) = delete; 29 PipePosix(PipePosix &&pipe_posix); 30 PipePosix &operator=(const PipePosix &) = delete; 31 PipePosix &operator=(PipePosix &&pipe_posix); 32 33 ~PipePosix() override; 34 35 Status CreateNew(bool child_process_inherit) override; 36 Status CreateNew(llvm::StringRef name, bool child_process_inherit) override; 37 Status CreateWithUniqueName(llvm::StringRef prefix, 38 bool child_process_inherit, 39 llvm::SmallVectorImpl<char> &name) override; 40 Status OpenAsReader(llvm::StringRef name, 41 bool child_process_inherit) override; 42 Status 43 OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit, 44 const std::chrono::microseconds &timeout) override; 45 46 bool CanRead() const override; 47 bool CanWrite() const override; 48 GetReadPipe()49 lldb::pipe_t GetReadPipe() const override { 50 return lldb::pipe_t(GetReadFileDescriptor()); 51 } GetWritePipe()52 lldb::pipe_t GetWritePipe() const override { 53 return lldb::pipe_t(GetWriteFileDescriptor()); 54 } 55 56 int GetReadFileDescriptor() const override; 57 int GetWriteFileDescriptor() const override; 58 int ReleaseReadFileDescriptor() override; 59 int ReleaseWriteFileDescriptor() override; 60 void CloseReadFileDescriptor() override; 61 void CloseWriteFileDescriptor() override; 62 63 // Close both descriptors 64 void Close() override; 65 66 Status Delete(llvm::StringRef name) override; 67 68 Status Write(const void *buf, size_t size, size_t &bytes_written) override; 69 Status ReadWithTimeout(void *buf, size_t size, 70 const std::chrono::microseconds &timeout, 71 size_t &bytes_read) override; 72 73 private: 74 int m_fds[2]; 75 }; 76 77 } // namespace lldb_private 78 79 #endif // #if defined(__cplusplus) 80 #endif // LLDB_HOST_POSIX_PIPEPOSIX_H 81