Async read an output stream but how many bytes ?
Basile B. via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Mar 30 17:50:16 PDT 2016
Hey, I have a class that wraps a process and implements two
events. One of them is called after poll() for example if new
data are available.
The event is called correctly but I don't know how exactly how to
read the data:
- per buffer of fixed size ?
- using the stream information ?
If i try to read until nothing is available anymore, the event
handler returns at the end of the process (instead of being
called several times): eg this helper function of the process
that the event handler can call to read:
bool readOutput(T)(ref T t)
if (isSomeString!T)
{
bool result;
T buffer;
while (true) // or (!output.eof)
{
auto cnt = output.readln(buffer);
if (cnt)
{
t ~= buffer;
result = true;
}
else break;
}
return result;
}
the events are called in the callback of a thread-based timer:
void check(Object notifier)
{
if (_ppid.stdout.eof)
{
_checker.stop; // the thrad-based timer
if(_onTerminate)
_onTerminate(this);
}
else
{
// not sure if something else must be done to poll
properly ?
pollfd pfd = { _ppid.stdout.fileno, POLLIN };
if (poll(&pfd, 1, 0) == 1 && _onOutputBuffer)
_onOutputBuffer(this); // the handler can call
readOutput
}
}
There should be a way to know how many bytes are available ?
More information about the Digitalmars-d-learn
mailing list