LINUX.ORG.RU

заставить execvp() понимать пайпы и перенаправления


0

0

Хеллоу.

Написал я тут маленький app launcher на C c GTK2... работает, но есть одна не очень приятная вещь.

Launcher использует execvp() и execlp(). execvp() используется для запуска X'овых 
прог, а execlp() запускает прогу через xterm -e.

С execlp() - проблем нет: `echo foo > ~/bar && cat ~/bar` выдает bar.

А вот execvp() - не понимает: `echo foo > ~/bar` сам по себе выдает foo > ~/bar.

Я так понимаю, что он передает <>| как аргумент, а не редирект.

Не подскажите, как решить проблему?
Вот, чтобы проще понять, что я сказал.

execlp("xterm" , "xterm", "-e", entry_text, NULL);  // char *entry_text
execvp(split[0] , split, NULL); //char *split[20]

Перенаправления реализованны в shell, если shell не используется, придется реализовывать самому - создавать два процесса и связывать через pipe один с другим. g_spawn_async_with_pipes хорошая для этого функция.

В случае когда запускается xterm, он запускает shell, а уж тот обрабатывает перенаправления.

Или, можно самому запускать shell

g_spawn_command_line_sync ("/bin/sh foo > bar" , NULL, NULL, NULL, NULL);

anonymous
()
24 августа 2005 г.
Ответ на: комментарий от anonymous

>Перенаправления реализованны в shell, если shell не используется, придется реализовывать самому - создавать два процесса и связывать через pipe один с другим. g_spawn_async_with_pipes хорошая для этого функция.

Вот значит как... Ну, тогда ести ли смысл мне что-то менять? Если надо пускать что-то с пайпами/перенапр. - то тогда через xterm, а если просто программу с аргументами - то без терминала.

А вот сам лаунчер, если кому интересно: http://teren.infonet.ee/downloads/runsmth-0.1.tar.bz2

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