LLDB mainline
PipeWindows.h
Go to the documentation of this file.
1//===-- PipeWindows.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 liblldb_Host_windows_PipeWindows_h_
10#define liblldb_Host_windows_PipeWindows_h_
11
12#include "lldb/Host/PipeBase.h"
14
15namespace lldb_private {
16
17/// \class Pipe PipeWindows.h "lldb/Host/windows/PipeWindows.h"
18/// A windows-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 PipeWindows : public PipeBase {
23public:
24 static const int kInvalidDescriptor = -1;
25
26public:
29 ~PipeWindows() override;
30
31 // Create an unnamed pipe.
32 Status CreateNew() override;
33
34 // Create a named pipe.
35 Status CreateNew(llvm::StringRef name) override;
36 Status CreateWithUniqueName(llvm::StringRef prefix,
37 llvm::SmallVectorImpl<char> &name) override;
38 Status OpenAsReader(llvm::StringRef name) override;
39 llvm::Error OpenAsWriter(llvm::StringRef name,
40 const Timeout<std::micro> &timeout) override;
41
42 bool CanRead() const override;
43 bool CanWrite() const override;
44
45 lldb::pipe_t GetReadPipe() const override { return lldb::pipe_t(m_read); }
46 lldb::pipe_t GetWritePipe() const override { return lldb::pipe_t(m_write); }
47
48 int GetReadFileDescriptor() const override;
49 int GetWriteFileDescriptor() const override;
50 int ReleaseReadFileDescriptor() override;
51 int ReleaseWriteFileDescriptor() override;
52 void CloseReadFileDescriptor() override;
53 void CloseWriteFileDescriptor() override;
54
55 void Close() override;
56
57 Status Delete(llvm::StringRef name) override;
58
59 llvm::Expected<size_t>
60 Write(const void *buf, size_t size,
61 const Timeout<std::micro> &timeout = std::nullopt) override;
62
63 llvm::Expected<size_t>
64 Read(void *buf, size_t size,
65 const Timeout<std::micro> &timeout = std::nullopt) override;
66
67 // PipeWindows specific methods. These allow access to the underlying OS
68 // handle.
69 HANDLE GetReadNativeHandle();
70 HANDLE GetWriteNativeHandle();
71
72private:
73 Status OpenNamedPipe(llvm::StringRef name, bool is_read);
74
75 HANDLE m_read;
76 HANDLE m_write;
77
80
83};
84
85} // namespace lldb_private
86
87#endif // liblldb_Host_posix_PipePosix_h_
bool CanWrite() const override
Status Delete(llvm::StringRef name) override
int ReleaseReadFileDescriptor() override
void CloseReadFileDescriptor() override
Status OpenNamedPipe(llvm::StringRef name, bool is_read)
void CloseWriteFileDescriptor() override
Status CreateNew() override
static const int kInvalidDescriptor
Definition PipeWindows.h:24
Status OpenAsReader(llvm::StringRef name) override
lldb::pipe_t GetWritePipe() const override
Definition PipeWindows.h:46
llvm::Expected< size_t > Read(void *buf, size_t size, const Timeout< std::micro > &timeout=std::nullopt) override
llvm::Expected< size_t > Write(const void *buf, size_t size, const Timeout< std::micro > &timeout=std::nullopt) override
lldb::pipe_t GetReadPipe() const override
Definition PipeWindows.h:45
int ReleaseWriteFileDescriptor() override
int GetWriteFileDescriptor() const override
llvm::Error OpenAsWriter(llvm::StringRef name, const Timeout< std::micro > &timeout) override
int GetReadFileDescriptor() const override
Status CreateWithUniqueName(llvm::StringRef prefix, llvm::SmallVectorImpl< char > &name) override
bool CanRead() const override
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