Здравствуйте.
Я хочу в своей программе запускать другую программу и ловить то, что она выдаёт в stdout.
Допустим делаю это так:
#include <stdio.h>
int main()
{
FILE * som_prog;
char stroka[200];
som_prog = popen("top", "r");
while (!feof(som_prog))
{
fgets(stroka, 199, som_prog);
printf("START: %s", stroka);
}
pclose(som_prog);
printf("END\n");
return 0;
}
// gcc -Wall -Wextra as2.c -o as2
В данном случае запускаю «top» и получаю ожидаемое...
...
START: 9481 dima 20 0 617380 61688 49960 S 6,0 0,8 59:14.48 gnome-system-mo
START: 2915 dima 20 0 1115668 196464 57604 S 2,3 2,4 73:16.01 plugin-containe
START: 1417 root 20 0 358360 112796 88736 S 1,0 1,4 66:37.20 Xorg
START: 2501 dima 20 0 1514860 190560 71068 S 1,0 2,3 33:44.33 compiz
START: 5991 dima 20 0 656628 32728 23936 S 1,0 0,4 0:17.11 gnome-terminal
...
Однако заковыка в другом. Мне нужно ловить данные от программы, которая сначала «плюёт» пару строк (и они успешно ловятся), а потом эта программа создаёт ещё один свой поток и «плюёт» строки уже из него. И вот эти строки уже не ловятся.
Что можно придумать?