Запуск скрипта, перенаправление вывода.
romikb 9 декабря, 2003 - 20:57.Подскажите способ запустить внешний скрипт, так чтобы результат его вывода можно было перенаправить в файл(строку и т.п.)
Вход в системуНавигацияНовые комментарииДругие материалы |
Запуск скрипта, перенаправление вывода.romikb 9 декабря, 2003 - 20:57.Подскажите способ запустить внешний скрипт, так чтобы результат его вывода можно было перенаправить в файл(строку и т.п.) |
Re(2):Запуск скрипта, перенаправление вывода.
А вот это не подоёдёт?
MyScript >> ~/output.txt
Если ничего не напутал, то в файле /boot/home/output.txt будет результат вывода скрипта MyScript.
Re(3):Запуск скрипта, перенаправление вывода.
должно быть одиночная стрелка >.
Re(9):Запуск скрипта, перенаправление вывода - код:
filedes[2], filedes2[2]; // pipes descriptors
pipe(filedes); //creating pipe
if ((ps_id_cat=fork())==0) // implementing fork and checking that we are in child process
{
dup2(filedes[0],fileno ( stdin)); // if in child — replacing stdin with pipe
pipe(filedes2);
if ((ps_id_smpeg=fork())==0) // implementing fork and checking that we are in child process
{
dup2(filedes2[0],fileno ( stdin));
atexit(bye);
execvp(«smpeg», argsmpeg); //calling cat and smpeg — it seems that with 'cat' occurs weirdnes — sometimes it works
exit(1) ; //sometimes dont
}
else
{
dup2(filedes2[1],fileno ( stdout));
atexit(bye);
execlp(«cat», cat, NULL);
exit(1);
}
}
else
dup2(filedes[1],fileno ( stdout)); //if in parent — replace stdout with pipe
Что тут делается. — VCDplay читает с диска файл, обрабатывает — направляет якобы в стандартный выход, на самом деле в трубу (pipe).
Это тебе еще не очень интересно.
Дальше, чтобы обойти некие глюки BeOS, вместо того чтобы направить трубу напрямую на стандартный вход программы smpeg, запускается шелловская команда cat
и ее стандартный вход соединяется со стандартных выходом vcdolay, а стандартный выход — со стандартных входом программы smpeg.
Так что кроме перечисленных тебе надо еще посмотреть
man fork.
Re(10):Запуск скрипта, перенаправление вывода - код:
да, впереди еще была декларация
int ps_id_cat, ps_id_smpeg, mpg_arg_cnt;
Re(11):Запуск скрипта, перенаправление вывода - код:
Понятно. Сам я сделал это через popen.
char buffer[512];
in = popen(«script»,"r");
while( fgets(buffer,512,in) )
printf("%s",buffer);
pclose(in);
Отправить комментарий