Files
UnrealEngine/Engine/Source/Programs/UnrealVirtualizationTool/Private/ProcessUtilities.h
2025-05-18 13:04:45 +08:00

78 lines
1.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "HAL/PlatformProcess.h"
#include "Logging/LogMacros.h"
#include "UnrealVirtualizationTool.h"
namespace UE::Virtualization
{
/** Wrapper around stdin and stdout pipes created by a call to FPlatformProcess::CreatePipe */
struct FProcessPipes
{
FProcessPipes()
{
verify(FPlatformProcess::CreatePipe(StdOutReadPipe, StdOutWritePipe, false));
verify(FPlatformProcess::CreatePipe(StdInReadPipe, StdInWritePipe, true));
}
~FProcessPipes()
{
FPlatformProcess::ClosePipe(StdOutReadPipe, StdOutWritePipe);
FPlatformProcess::ClosePipe(StdInReadPipe, StdInWritePipe);
}
void ProcessStdOut()
{
check(GetStdOutForReading() != nullptr);
FString Output = FPlatformProcess::ReadPipe(GetStdOutForReading());
while (!Output.IsEmpty())
{
TArray<FString> Lines;
Output.ParseIntoArray(Lines, LINE_TERMINATOR);
for (const FString& Line : Lines)
{
UE_LOG(LogVirtualizationTool, Display, TEXT("Child Process-> %s"), *Line);
}
Output = FPlatformProcess::ReadPipe(GetStdOutForReading());
}
}
void* GetStdInForProcess() const
{
return StdInReadPipe;
}
void* GetStdInForWriting() const
{
return StdInWritePipe;
}
void* GetStdOutForProcess() const
{
return StdOutWritePipe;
}
void* GetStdOutForReading() const
{
return StdOutReadPipe;
}
private:
void* StdOutReadPipe = nullptr;
void* StdOutWritePipe = nullptr;
void* StdInReadPipe = nullptr;
void* StdInWritePipe = nullptr;
};
} // namespace UE::Virtualization