PipeBase.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //===-- PipeBase.h -----------------------------------------------*- C++
  2. //-*-===//
  3. //
  4. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  5. // See https://llvm.org/LICENSE.txt for license information.
  6. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLDB_HOST_PIPEBASE_H
  10. #define LLDB_HOST_PIPEBASE_H
  11. #include <chrono>
  12. #include <string>
  13. #include "lldb/Utility/Status.h"
  14. #include "llvm/ADT/SmallVector.h"
  15. #include "llvm/ADT/StringRef.h"
  16. namespace lldb_private {
  17. class PipeBase {
  18. public:
  19. virtual ~PipeBase();
  20. virtual Status CreateNew(bool child_process_inherit) = 0;
  21. virtual Status CreateNew(llvm::StringRef name,
  22. bool child_process_inherit) = 0;
  23. virtual Status CreateWithUniqueName(llvm::StringRef prefix,
  24. bool child_process_inherit,
  25. llvm::SmallVectorImpl<char> &name) = 0;
  26. virtual Status OpenAsReader(llvm::StringRef name,
  27. bool child_process_inherit) = 0;
  28. Status OpenAsWriter(llvm::StringRef name, bool child_process_inherit);
  29. virtual Status
  30. OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
  31. const std::chrono::microseconds &timeout) = 0;
  32. virtual bool CanRead() const = 0;
  33. virtual bool CanWrite() const = 0;
  34. virtual lldb::pipe_t GetReadPipe() const = 0;
  35. virtual lldb::pipe_t GetWritePipe() const = 0;
  36. virtual int GetReadFileDescriptor() const = 0;
  37. virtual int GetWriteFileDescriptor() const = 0;
  38. virtual int ReleaseReadFileDescriptor() = 0;
  39. virtual int ReleaseWriteFileDescriptor() = 0;
  40. virtual void CloseReadFileDescriptor() = 0;
  41. virtual void CloseWriteFileDescriptor() = 0;
  42. // Close both descriptors
  43. virtual void Close() = 0;
  44. // Delete named pipe.
  45. virtual Status Delete(llvm::StringRef name) = 0;
  46. virtual Status Write(const void *buf, size_t size, size_t &bytes_written) = 0;
  47. virtual Status ReadWithTimeout(void *buf, size_t size,
  48. const std::chrono::microseconds &timeout,
  49. size_t &bytes_read) = 0;
  50. Status Read(void *buf, size_t size, size_t &bytes_read);
  51. };
  52. }
  53. #endif