LINUX.ORG.RU

Ответ на: комментарий от Onanim

Спасибо! А какой ф-ией читать построчно из потока?
Дело в том что перл скрипт пишет в поток строчку, потом ждет какое-то время и опять пишет.

Ф-ия fgets не годиться поскольку она берет весь вывод сразу :(

anonymous
()
Ответ на: комментарий от anonymous

> Ф-ия fgets не годиться поскольку она берет весь вывод сразу :(

Функция fgets читает построчно.
Возможно твой perl-script пишет строчки без завершающего "\n"?
Или как сказал Casus в соседнем треде можно использовать
GNU-specific функцию getline():
http://www.linux.org.ru/jump-message.jsp?msgid=1330645#1331486

HTH

Onanim
()
Ответ на: комментарий от Onanim

> Функция fgets читает построчно. 

[user@home Projects]$ cat test/test.pl
#!/usr/bin/perl

for($i =1; $i < 5; $i++){
        print "str $i\n";
        sleep(5);
}


// main.c

#include <stdio.h>
int main()
{
	FILE *file;
	char buf[1024];
	file = popen("/home/user/Projects/test/test.pl","r");
	if(file != NULL){
 		printf("OK\n");
		while(1){
			if(fgets(buf,1024,file) == NULL)break;
			printf("- %s",buf);
		}		
		pclose(file);		
	}	
	return 0;
}


Программа выплевывает сразу все строчки а не постепенно :(

anonymous
()
Ответ на: комментарий от anonymous

> Функция fgets читает построчно.

... код поскипан ...

> Программа выплевывает сразу все строчки а не постепенно :(

Авотх#й! :-)))
Выключи буферизацию в своем perl-скрипте!
(для этого добавь $|++ до своего for-цикла.
Ну и почитай perldoc -q buffer)

HTH



Onanim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.