57 int read (
char* destBuffer,
int maxBytesToRead,
int timeOutMilliseconds)
62 while (bytesRead < maxBytesToRead)
64 const auto pipe =
pipeIn.get();
66 auto bytesThisTime = maxBytesToRead - bytesRead;
67 auto numRead = (
int)
::read (pipe, destBuffer, (
size_t) bytesThisTime);
71 const auto error = errno;
76 const int maxWaitingTime = 30;
78 :
jmin (maxWaitingTime,
84 destBuffer += numRead;
90 int write (
const char* sourceBuffer,
int numBytesToWrite,
int timeOutMilliseconds)
94 const auto pipe =
openPipe (
false, timeoutEnd);
101 while (bytesWritten < numBytesToWrite && !
hasExpired (timeoutEnd))
103 auto bytesThisTime = numBytesToWrite - bytesWritten;
104 auto numWritten = (
int)
::write (pipe, sourceBuffer, (
size_t) bytesThisTime);
108 const auto error = errno;
109 const int maxWaitingTime = 30;
112 waitToWrite (pipe, timeoutEnd == 0 ? maxWaitingTime
113 :
jmin (maxWaitingTime,
121 bytesWritten += numWritten;
122 sourceBuffer += numWritten;
130 return mkfifo (
name.toUTF8(), 0666) == 0 || ((! mustNotExist) && errno == EEXIST);
146 template <
typename Fn>
221 const auto flags = (isInput ? O_RDWR : O_WRONLY) | O_NONBLOCK;
226 return pipe.get ([
this, &pipeName, &
flags, &timeoutEnd]
234 pollfd pfd { handle, POLLIN, 0 };
235 poll (&pfd, 1, timeoutMsecs);
240 pollfd pfd { handle, POLLOUT, 0 };
241 poll (&pfd, 1, timeoutMsecs);
252 if (
pimpl !=
nullptr)
254 pimpl->stopReadOperation =
true;
256 const char buffer[] { 0 };
274 auto file = pipeName;
282 if (createPipe && !
pimpl->createFifos (mustNotExist))
288 if (!
pimpl->connect (200))
300 return pimpl !=
nullptr ?
pimpl->read (
static_cast<char*
> (destBuffer), maxBytesToRead, timeOutMilliseconds) : -1;
303int NamedPipe::write (
const void* sourceBuffer,
int numBytesToWrite,
int timeOutMilliseconds)
306 return pimpl !=
nullptr ?
pimpl->write (
static_cast<const char*
> (sourceBuffer), numBytesToWrite, timeOutMilliseconds) : -1;
static String createLegalFileName(const String &fileNameToFix)
Definition File.cpp:848
static bool isAbsolutePath(StringRef path)
Definition juce_File.cpp:400
@ tempDirectory
Definition juce_File.h:913
static File JUCE_CALLTYPE getSpecialLocation(const SpecialLocationType type)
Definition juce_linux_Files.cpp:107
static String createLegalFileName(const String &fileNameToFix)
Definition juce_File.cpp:835
Definition juce_posix_NamedPipe.cpp:144
void close()
Definition juce_posix_NamedPipe.cpp:160
int descriptor
Definition juce_posix_NamedPipe.cpp:182
int get(Fn &&fn)
Definition juce_posix_NamedPipe.cpp:147
ReadWriteLock mutex
Definition juce_posix_NamedPipe.cpp:181
int get()
Definition juce_posix_NamedPipe.cpp:174
Definition juce_posix_NamedPipe.cpp:29
const bool createdPipe
Definition juce_posix_NamedPipe.cpp:189
const String pipeInName
Definition juce_posix_NamedPipe.cpp:185
int read(char *destBuffer, int maxBytesToRead, int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:57
PipeDescriptor pipeIn
Definition juce_posix_NamedPipe.cpp:186
~Pimpl()
Definition juce_posix_NamedPipe.cpp:40
static constexpr auto invalidPipe
Definition juce_posix_NamedPipe.cpp:141
const String pipeOutName
Definition juce_posix_NamedPipe.cpp:185
static void waitToWrite(int handle, int timeoutMsecs) noexcept
Definition juce_posix_NamedPipe.cpp:238
bool createdFifoIn
Definition juce_posix_NamedPipe.cpp:187
int write(const char *sourceBuffer, int numBytesToWrite, int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:90
bool connect(int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:52
int openPipe(bool isInput, uint32 timeoutEnd)
Definition juce_posix_NamedPipe.cpp:218
Pimpl(const String &pipePath, bool createPipe)
Definition juce_posix_NamedPipe.cpp:31
bool createFifos(bool mustNotExist)
Definition juce_posix_NamedPipe.cpp:133
std::atomic< bool > stopReadOperation
Definition juce_posix_NamedPipe.cpp:190
static bool createFifo(const String &name, bool mustNotExist)
Definition juce_posix_NamedPipe.cpp:128
static void signalHandler(int)
Definition juce_posix_NamedPipe.cpp:193
static void waitForInput(int handle, int timeoutMsecs) noexcept
Definition juce_posix_NamedPipe.cpp:232
bool createdFifoOut
Definition juce_posix_NamedPipe.cpp:187
int openPipe(const String &name, int flags, uint32 timeoutEnd)
Definition juce_posix_NamedPipe.cpp:205
static bool hasExpired(uint32 timeoutEnd)
Definition juce_posix_NamedPipe.cpp:200
static uint32 getTimeoutEnd(int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:195
PipeDescriptor pipeOut
Definition juce_posix_NamedPipe.cpp:186
int write(const void *sourceBuffer, int numBytesToWrite, int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:303
ReadWriteLock lock
Definition juce_NamedPipe.h:93
int read(void *destBuffer, int maxBytesToRead, int timeOutMilliseconds)
Definition juce_posix_NamedPipe.cpp:297
std::unique_ptr< Pimpl > pimpl
Definition juce_NamedPipe.h:91
bool openInternal(const String &pipeName, bool createPipe, bool mustNotExist)
Definition juce_posix_NamedPipe.cpp:268
void close()
Definition juce_posix_NamedPipe.cpp:247
Definition juce_ReadWriteLock.h:48
Definition juce_ScopedReadLock.h:52
Definition juce_ScopedWriteLock.h:52
Definition juce_String.h:53
static void JUCE_CALLTYPE sleep(int milliseconds)
Definition juce_posix_SharedCode.h:44
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
int * l
Definition inflate.c:1579
static const char * name
Definition pugl.h:1582
Definition carla_juce.cpp:31
int juce_siginterrupt(int sig, int flag)
Definition juce_posix_SharedCode.h:143
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
unsigned int uint32
Definition juce_MathsFunctions.h:45
void ignoreUnused(Types &&...) noexcept
Definition juce_MathsFunctions.h:333
constexpr int numElementsInArray(Type(&)[N]) noexcept
Definition juce_MathsFunctions.h:344
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t port void func jack_client_t const char const char unsigned long flags
Definition juce_linux_JackAudio.cpp:69
const char const char const char const char char * fn
Definition swell-functions.h:168
uch * p
Definition crypt.c:594
typedef int(UZ_EXP MsgFn)()
struct zdirent * file
Definition win32.c:1500