LLDB mainline
PipePosix.h
Go to the documentation of this file.
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
12#include "lldb/Host/PipeBase.h"
13#include <mutex>
14
15namespace 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.
22class PipePosix : public PipeBase {
23public:
25
26 PipePosix();
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() override;
36 Status CreateNew(llvm::StringRef name) override;
37 Status CreateWithUniqueName(llvm::StringRef prefix,
38 llvm::SmallVectorImpl<char> &name) override;
39 Status OpenAsReader(llvm::StringRef name) override;
40 llvm::Error OpenAsWriter(llvm::StringRef name,
41 const Timeout<std::micro> &timeout) override;
42
43 bool CanRead() const override;
44 bool CanWrite() const override;
45
46 lldb::pipe_t GetReadPipe() const override {
48 }
49 lldb::pipe_t GetWritePipe() const override {
51 }
52
53 int GetReadFileDescriptor() const override;
54 int GetWriteFileDescriptor() const override;
55 int ReleaseReadFileDescriptor() override;
56 int ReleaseWriteFileDescriptor() override;
57 void CloseReadFileDescriptor() override;
58 void CloseWriteFileDescriptor() override;
59
60 // Close both descriptors
61 void Close() override;
62
63 Status Delete(llvm::StringRef name) override;
64
65 llvm::Expected<size_t>
66 Write(const void *buf, size_t size,
67 const Timeout<std::micro> &timeout = std::nullopt) override;
68
69 llvm::Expected<size_t>
70 Read(void *buf, size_t size,
71 const Timeout<std::micro> &timeout = std::nullopt) override;
72
73private:
74 bool CanReadUnlocked() const;
75 bool CanWriteUnlocked() const;
76
83 void CloseUnlocked();
84
85 int m_fds[2];
86
87 /// Mutexes for m_fds;
88 mutable std::mutex m_read_mutex;
89 mutable std::mutex m_write_mutex;
90};
91
92} // namespace lldb_private
93
94#endif // LLDB_HOST_POSIX_PIPEPOSIX_H
llvm::Error OpenAsWriter(llvm::StringRef name, const Timeout< std::micro > &timeout) override
int ReleaseWriteFileDescriptorUnlocked()
int GetReadFileDescriptor() const override
lldb::pipe_t GetWritePipe() const override
Definition PipePosix.h:49
void CloseWriteFileDescriptor() override
Status CreateNew() override
Definition PipePosix.cpp:82
bool CanWrite() const override
bool CanRead() const override
void Close() override
static int kInvalidDescriptor
Definition PipePosix.h:24
std::mutex m_read_mutex
Mutexes for m_fds;.
Definition PipePosix.h:88
int ReleaseReadFileDescriptor() override
llvm::Expected< size_t > Read(void *buf, size_t size, const Timeout< std::micro > &timeout=std::nullopt) override
Status Delete(llvm::StringRef name) override
int ReleaseReadFileDescriptorUnlocked()
void CloseWriteFileDescriptorUnlocked()
int GetReadFileDescriptorUnlocked() const
Status OpenAsReader(llvm::StringRef name) override
bool CanWriteUnlocked() const
PipePosix & operator=(const PipePosix &)=delete
llvm::Expected< size_t > Write(const void *buf, size_t size, const Timeout< std::micro > &timeout=std::nullopt) override
PipePosix(const PipePosix &)=delete
int ReleaseWriteFileDescriptor() override
void CloseReadFileDescriptorUnlocked()
void CloseReadFileDescriptor() override
bool CanReadUnlocked() const
int GetWriteFileDescriptor() const override
int GetWriteFileDescriptorUnlocked() const
Status CreateWithUniqueName(llvm::StringRef prefix, llvm::SmallVectorImpl< char > &name) override
lldb::pipe_t GetReadPipe() const override
Definition PipePosix.h:46
std::mutex m_write_mutex
Definition PipePosix.h:89
An error handling class.
Definition Status.h:118
A class that represents a running process on the host machine.
int pipe_t
Definition lldb-types.h:64