5
static uint readFromHandle(HANDLE h, char *buf, uint size)
9
if(ReadFile(h, buf, size, &r, 0))
23
//----------------------------------------------------------------------------
25
//----------------------------------------------------------------------------
36
void QPipeEnd::reset()
45
bool QPipeEnd::isOpen() const
48
return (p ? true: false);
50
return (p != -1 ? true: false);
54
const QPipeId & QPipeEnd::id() const
59
void QPipeEnd::setId(const QPipeId &x)
64
void QPipeEnd::close()
76
void QPipeEnd::release()
81
QString QPipeEnd::toString() const
85
memcpy(&dw, &p, sizeof(DWORD));
86
return QString::number(dw);
88
return QString::number(p);
92
int QPipeEnd::write(const QByteArray &buf)
96
if(!WriteFile(p, buf.data(), buf.size(), &written, 0))
100
return (::write(p, buf.data(), buf.size()));
104
QByteArray QPipeEnd::readAll(bool *done)
111
if(!PeekNamedPipe(p, &dummy, 1, &r, &i, 0))
118
int size = readFromHandle(p, buf.data(), i);
128
int n = read(p, block, 1024);
130
if(errno == EAGAIN) {
145
int oldsize = buf.size();
146
buf.resize(oldsize + n);
147
memcpy(buf.data() + oldsize, block, n);
155
bool QPipeEnd::winDupHandle()
158
if(!DuplicateHandle(GetCurrentProcess(), p, GetCurrentProcess(), &h, 0, FALSE, DUPLICATE_SAME_ACCESS))
167
bool QPipeEnd::setBlock(bool b)
169
int flags = fcntl(p, F_GETFL);
173
flags &= ~O_NONBLOCK;
174
if(fcntl(p, F_SETFL, flags) == -1)
181
//----------------------------------------------------------------------------
183
//----------------------------------------------------------------------------
193
void QPipe::closeReadEnd()
198
void QPipe::closeWriteEnd()
203
int QPipe::write(const QByteArray &buf)
208
QByteArray QPipe::readAll(bool *done)
210
return i.readAll(done);
218
SECURITY_ATTRIBUTES secAttr;
219
memset(&secAttr, 0, sizeof secAttr);
220
secAttr.nLength = sizeof secAttr;
221
secAttr.bInheritHandle = TRUE;
224
if(!CreatePipe(&r, &w, &secAttr, 0))
244
void QPipe::release()