23#include "pedigree/kernel/Log.h"
24#include "pedigree/kernel/compiler.h"
25#include "pedigree/kernel/process/ConditionVariable.h"
26#include "pedigree/kernel/processor/types.h"
27#include "pedigree/kernel/time/Time.h"
28#include "pedigree/kernel/utilities/String.h"
31#include "PipeBuffer.h"
33#define PIPE_BUF_MAX 4096
44 FATAL(
"Casting non-pipe/fifo File to Pipe!");
45 return reinterpret_cast<Pipe*
>(pF);
59 Pipe(
const String& name, Time::Timestamp accessedTime, Time::Timestamp modifiedTime,
60 Time::Timestamp creationTime, uintptr_t inode,
class Filesystem* pFs,
size_t size,
61 File* pParent,
bool bIsAnonymous =
false);
66 virtual int select(
bool bWriting =
false,
int timeout = 0);
68 ReadyMask
queryReady(
bool reading,
bool writing)
override;
76 virtual uint64_t
readBytewise(uint64_t location, uint64_t size, uintptr_t buffer,
77 bool bCanBlock =
true);
79 virtual uint64_t
writeBytewise(uint64_t location, uint64_t size, uintptr_t buffer,
80 bool bCanBlock =
true);
83 virtual bool isPipe()
const;
85 virtual bool isFifo()
const;
91 virtual void increaseRefCount(
bool bIsWriter);
95 virtual void decreaseRefCount(
bool bIsWriter);
104 size_t readableBytes();
107 size_t getReaderCount();
110 size_t getWriterCount();
118 bool waitForReader(
bool bCanBlock);
127 void copyTo(uint8_t* destination,
size_t count)
const;
128 void consume(
size_t accepted);
134 Pipe* m_Pipe =
nullptr;
151 Pipe* m_Pipe =
nullptr;
174 uint64_t m_WriteGeneration;
175 uint64_t m_ErrorGeneration;
176 uint64_t m_HangupGeneration;
184 bool shouldQueueRetirementLocked();
186 static void bufferChanged(
void* context);
virtual uint64_t readBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
virtual bool retainVfsReference()
virtual void releaseVfsReference()
virtual bool isFifo() const
virtual bool isPipe() const
virtual ReadyMask queryReady(bool reading, bool writing)
virtual uint64_t writeBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
virtual int select(bool bWriting=false, int timeout=0)
virtual bool isBytewise() const
static Pipe * fromFile(File *pF)
bool supportsReadinessNotifications() const override
virtual bool isSeekable() const
ConditionVariable m_ReaderCondition
virtual ReadinessGenerations readinessGenerations()