Правильный код - неблокирующая труба с попой
Существует множество вопросов о неблокирующих каналах, но НЕТ примеров кода, который можно скопировать и вставить (с небольшим исправлением) и использовать.
Я получил идею и источники из этой темы: Неблокирующая труба с использованием popen?
Но как это использовать? Вwhile
цикл? Пожалуйста, просмотрите мои изменения. Это действительно нужно использоватьerrno == EAGAIN
& Амп; дополнительный заголовок#include <cerrno>
?
Suggest you own better version if need:
FILE *pipe;
char buff[512];
if ( !(pipe = popen( command.c_str(), "r")) ) return false;
int d = fileno(pipe);
while ( true )
{
ssize_t r = read(d, buff, sizeof(buff));
if (r == -1 && errno == EAGAIN) // really need errno?
continue;
else if (r > 0)
ptr_output->append(buff);
else
break;
}
pclose(pipe);