UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PlatformProcess.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6
7#include COMPILED_PLATFORM_HEADER(PlatformProcess.h) // IWYU pragma: export
8
9namespace UE::HAL
10{
11 struct [[nodiscard]] FPipe
12 {
13 constexpr FPipe() = default;
14 FPipe(const FPipe&) = delete;
15 FPipe& operator=(const FPipe&) = delete;
16
17 constexpr FPipe(std::nullptr_t)
18 {
19 }
20
22 : ReadHandle{std::exchange(Other.ReadHandle, {})}
23 , WriteHandle{std::exchange(Other.WriteHandle, {})}
24 {
25 }
26
28 {
29 FPlatformProcess::ClosePipe(ReadHandle, WriteHandle);
30 }
31
32 FPipe& operator=(std::nullptr_t)
33 {
34 FPlatformProcess::ClosePipe(std::exchange(ReadHandle, {}), std::exchange(WriteHandle, {}));
35 return *this;
36 }
37
39 {
40 Swap(ReadHandle, Other.ReadHandle);
41 Swap(WriteHandle, Other.WriteHandle);
42 return *this;
43 }
44
45 bool operator==(std::nullptr_t) const
46 {
47 return !ReadHandle;
48 }
49
50 explicit operator bool() const
51 {
52 return bool(ReadHandle);
53 }
54
55 protected:
58
60 : ReadHandle{Pipe.Get<FReadHandle>()}
61 , WriteHandle{Pipe.Get<FWriteHandle>()}
62 {
63 }
64
65 explicit FPipe(bool bWritePipeLocal)
67 {
68 void* ReadPipe;
69 void* WritePipe;
70 if (!FPlatformProcess::CreatePipe(ReadPipe, WritePipe, bWritePipeLocal))
71 {
72 ReadPipe = nullptr;
73 WritePipe = nullptr;
74 }
75 return TTuple<FReadHandle, FWriteHandle>{ReadPipe, WritePipe};
76 }()}
77 {
78 }
79 };
80
81 inline constexpr struct FNewPipe
82 {
83 }
85
87 {
88 using FPipe::FPipe;
89
91 : FPipe{false}
92 {
93 }
94
95 void* NativeHandle() const
96 {
97 return ReadHandle;
98 }
99
100 FString Read()
101 {
102 check(*this);
103 return FPlatformProcess::ReadPipe(ReadHandle);
104 }
105
106 operator FWriteHandle()&
107 {
108 return WriteHandle;
109 }
110 };
111
113 {
114 using FPipe::FPipe;
115
117 : FPipe{true}
118 {
119 }
120
121 void* NativeHandle() const
122 {
123 return WriteHandle;
124 }
125
126 bool Write(const FString& Message)
127 {
128 check(*this);
129 return FPlatformProcess::WritePipe(WriteHandle, Message);
130 }
131
132 operator FReadHandle()&
133 {
134 return ReadHandle;
135 }
136 };
137
139 {
140 constexpr FProcess() = default;
141 FProcess(const FProcess&) = delete;
142 FProcess& operator=(const FProcess&) = delete;
143
144 constexpr FProcess(std::nullptr_t)
145 {
146 }
147
149 : Handle{FPlatformProcess::OpenProcess(std::underlying_type_t<EProcessId>(ProcessId))}
150 {
151 }
152
154 : Handle{FPlatformProcess::CreateProc(StartInfo).Get<FProcHandle>()}
155 {
156 }
157
167
170 {
171 Other.Handle.Reset();
172 }
173
178
179 FProcess& operator=(std::nullptr_t)
180 {
182 return *this;
183 }
184
186 {
187 Swap(Handle, Other.Handle);
188 return *this;
189 }
190
191 decltype(auto) NativeHandle() const
192 {
193 return Handle.Get();
194 }
195
197 {
198 check(*this);
200 }
201
208
209 // Bug in PVS to flag references
210 //-V:WaitForExit:530
212 {
213 check(*this);
215 return *this;
216 }
217
218 // Bug in PVS to flag references
219 //-V:Kill:530
220 FProcess& Kill(bool bEntireTree = false)
221 {
222 check(*this);
224 return *this;
225 }
226
227 bool operator==(std::nullptr_t) const
228 {
229 return !Handle.IsValid();
230 }
231
232 explicit operator bool() const
233 {
234 return Handle.IsValid();
235 }
236
237 private:
239 };
240}
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
constexpr FNullOpt NullOpt
Definition Optional.h:15
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
const bool
Definition NetworkReplayStreaming.h:178
Definition AndroidPlatformManualResetEvent.cpp:14
EProcessId
Definition GenericPlatformProcess.h:210
constexpr struct UE::HAL::FNewPipe NewPipe
@ false
Definition radaudio_common.h:23
Definition AndroidPlatformProcess.h:30
static CORE_API void ClosePipe(void *ReadPipe, void *WritePipe)
Definition GenericPlatformProcess.cpp:621
static CORE_API bool WritePipe(void *WritePipe, const FString &Message, FString *OutWritten=nullptr)
Definition GenericPlatformProcess.cpp:644
static CORE_API void CloseProc(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:328
static CORE_API bool IsProcRunning(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:317
static CORE_API void WaitForProc(FProcHandle &ProcessHandle)
Definition GenericPlatformProcess.cpp:323
static CORE_API bool CreatePipe(void *&ReadPipe, void *&WritePipe, bool bWritePipeLocal=false)
Definition GenericPlatformProcess.cpp:626
static CORE_API FString ReadPipe(void *ReadPipe)
Definition GenericPlatformProcess.cpp:632
static CORE_API void TerminateProc(FProcHandle &ProcessHandle, bool KillTree=false)
Definition GenericPlatformProcess.cpp:333
static CORE_API bool GetProcReturnCode(FProcHandle &ProcHandle, int32 *ReturnCode)
Definition GenericPlatformProcess.cpp:351
static CORE_API FProcHandle CreateProc(const TCHAR *URL, const TCHAR *Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32 *OutProcessID, int32 PriorityModifier, const TCHAR *OptionalWorkingDirectory, void *PipeWriteChild, void *PipeReadChild=nullptr)
Definition GenericPlatformProcess.cpp:293
Definition AndroidPlatformProcess.h:13
Definition Optional.h:131
Definition Tuple.h:652
Definition PlatformProcess.h:87
FInputPipe(FNewPipe)
Definition PlatformProcess.h:90
void * NativeHandle() const
Definition PlatformProcess.h:95
FString Read()
Definition PlatformProcess.h:100
Definition PlatformProcess.h:82
Definition PlatformProcess.h:113
bool Write(const FString &Message)
Definition PlatformProcess.h:126
FOutputPipe(FNewPipe)
Definition PlatformProcess.h:116
void * NativeHandle() const
Definition PlatformProcess.h:121
Definition PlatformProcess.h:12
FPipe(TTuple< FReadHandle, FWriteHandle > Pipe)
Definition PlatformProcess.h:59
constexpr FPipe(std::nullptr_t)
Definition PlatformProcess.h:17
FPipe & operator=(std::nullptr_t)
Definition PlatformProcess.h:32
FPipe(const FPipe &)=delete
FReadHandle ReadHandle
Definition PlatformProcess.h:56
FPipe(FPipe &&Other)
Definition PlatformProcess.h:21
FPipe & operator=(FPipe &&Other)
Definition PlatformProcess.h:38
FWriteHandle WriteHandle
Definition PlatformProcess.h:57
FPipe & operator=(const FPipe &)=delete
FPipe(bool bWritePipeLocal)
Definition PlatformProcess.h:65
bool operator==(std::nullptr_t) const
Definition PlatformProcess.h:45
~FPipe()
Definition PlatformProcess.h:27
constexpr FPipe()=default
Definition GenericPlatformProcess.h:197
Definition PlatformProcess.h:139
FProcess(const FProcessStartInfo &StartInfo)
Definition PlatformProcess.h:153
bool operator==(std::nullptr_t) const
Definition PlatformProcess.h:227
FProcess & Kill(bool bEntireTree=false)
Definition PlatformProcess.h:220
FProcess & operator=(const FProcess &)=delete
~FProcess()
Definition PlatformProcess.h:174
FProcess & WaitForExit()
Definition PlatformProcess.h:211
TOptional< int32 > GetExitCode()
Definition PlatformProcess.h:202
FProcess(EProcessId ProcessId)
Definition PlatformProcess.h:148
FProcess(const FProcess &)=delete
decltype(auto) NativeHandle() const
Definition PlatformProcess.h:191
FProcess(FProcess &&Other)
Definition PlatformProcess.h:168
FProcess & operator=(FProcess &&Other)
Definition PlatformProcess.h:185
constexpr FProcess()=default
FProcess(const FProcessStartInfo &StartInfo, EProcessId &OutProcessId)
Definition PlatformProcess.h:158
bool IsRunning()
Definition PlatformProcess.h:196
constexpr FProcess(std::nullptr_t)
Definition PlatformProcess.h:144
FProcess & operator=(std::nullptr_t)
Definition PlatformProcess.h:179
Definition GenericPlatformProcess.h:177
Definition GenericPlatformProcess.h:187