Форум — Development Подскажите как на С запустить файл и читать что он выводит? 0 0 Есть перл скрипт. Нужно написать Си программу которая его запускает и читает/обрабатывает информацию которую он выводит. Помогите плиз кусочком кода Ссылка
man popen Если с примером кода - тогда info popen или http://www.gnu.org/software/libc/manual/html_node/Pipe-to-a-Subprocess.html#P... HTH Onanim ★ (31.03.06 10:39:11 MSK) Показать ответ Ссылка
Ответ на: комментарий от Onanim 31.03.06 10:39:11 MSK Спасибо! А какой ф-ией читать построчно из потока? Дело в том что перл скрипт пишет в поток строчку, потом ждет какое-то время и опять пишет. Ф-ия fgets не годиться поскольку она берет весь вывод сразу :( anonymous (31.03.06 11:51:19 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 31.03.06 11:51:19 MSK > Ф-ия fgets не годиться поскольку она берет весь вывод сразу :( Функция fgets читает построчно. Возможно твой perl-script пишет строчки без завершающего "\n"? Или как сказал Casus в соседнем треде можно использовать GNU-specific функцию getline(): http://www.linux.org.ru/jump-message.jsp?msgid=1330645#1331486 HTH Onanim ★ (31.03.06 11:57:29 MSK) Показать ответ Ссылка
Ответ на: комментарий от Onanim 31.03.06 11:57:29 MSK > Функция 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 (31.03.06 12:17:32 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 31.03.06 12:17:32 MSK > Функция fgets читает построчно. ... код поскипан ... > Программа выплевывает сразу все строчки а не постепенно :( Авотх#й! :-))) Выключи буферизацию в своем perl-скрипте! (для этого добавь $|++ до своего for-цикла. Ну и почитай perldoc -q buffer) HTH Onanim ★ (31.03.06 12:42:47 MSK) Показать ответы Ссылка
Ответ на: комментарий от Onanim 31.03.06 12:42:47 MSK Спасибо. Все понял anonymous (31.03.06 12:49:51 MSK) Ссылка
Ответ на: комментарий от Onanim 31.03.06 12:42:47 MSK >Выключи буферизацию в своем perl-скрипте! по моемому ему надо делать flush или autoflush cvv ★★★★★ (31.03.06 13:42:32 MSK) Показать ответ Ссылка
Ответ на: комментарий от cvv 31.03.06 13:42:32 MSK переменная $| это и делает OxiD ★★★★ (01.04.06 09:33:53 MSK) Ссылка