URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1355
[ Назад ]

Исходное сообщение
"как запустить одно приложение из другого"

Отправлено vvk , 04-Фев-03 23:48 
совсем отчаялся скрестить XImage и jpeglib и прочие утилиты. поэтому
подумал, что может пока получить скриншот утилитой import, вызывая ее из кода своей программы. но как это сделать?

Содержание

Сообщения в этом обсуждении
"RE: как запустить одно приложение из другого"
Отправлено XMan , 05-Фев-03 01:13 
В C/C++ ? Семейство функций exec (например execl) ?

"RE: как запустить одно приложение из другого"
Отправлено vvk , 05-Фев-03 09:15 
>В C/C++ ? Семейство функций exec (например execl) ?
ок, попробую. но уже пытался сделать execv - нифига. причем молча.



"RE: как запустить одно приложение из другого"
Отправлено XMan , 05-Фев-03 17:13 
А как выглядела попытка в плане параметров функции ?

"RE: как запустить одно приложение из другого"
Отправлено vvk , 06-Фев-03 20:55 
>А как выглядела попытка в плане параметров функции ?

execl("import","import","-window","root","bb.jpg",NULL)

задолбался уже. делов то. сграбить картинку и сконвертить. ан нет.



"RE: как запустить одно приложение из другого"
Отправлено XMan , 07-Фев-03 01:05 
А что есть первое "import" и чем оно отличается от второго ?
Короче, первой идет программа (с полным путем), за ней куча параметров командной строки и ограничитель NULL. Дабы долго не думать где лежит программа народ часто пользует конструкцию, типа:

execl("/bin/sh","-c","программа","параметр1",...,"параметр N",NULL);

или еще проще:

execl("/bin/sh","-c","программа параметр1... параметр N",NULL);

В этом случае командную строку можно подставить такую же, какую ты набираешь в консоли. Естественно, всякие там кавычки и бэкслэши (если таковые присутствуют) нужно учитывать.


"RE: как запустить одно приложение из другого"
Отправлено vvk , 07-Фев-03 09:19 
ok. вчера таки удалось сделать!
использовал вызов
system("import -window root asd.jpg");

то, что import два раза написано, это я с какого то man-a переписал. А вообще пробовал разные варианты exec, но нифига не получалось.



"RE: как запустить одно приложение из другого"
Отправлено Soldier , 07-Фев-03 17:32 
>>А как выглядела попытка в плане параметров функции ?
>
>execl("import","import","-window","root","bb.jpg",NULL)
>
>задолбался уже. делов то. сграбить картинку и сконвертить. ан нет.


Да вообще-то все правильно, только нужно указывать полный путь к import - например у меня:
which import
/usr/bin/import

Короче попробуйте так (если не лень):
execl("/usr/bin/import","import","-window","root","bb.jpg",NULL);

XMan - ну ты меня удивляешь - параметры идут с 0, а 0-вой параметр по соглашению есть имя программы.

Поэтому при использовании execl сначала указывается полный путь, затем имя программы, затем аргументы командной строки, в конце NULL. Поэтому надо так:

execl("/bin/sh","/bin/sh","-c","программа","параметр1",...,"параметр N",NULL);

(вместо второго /bin/sh в данном случае можно поставить все что угодно)


"RE: как запустить одно приложение из другого"
Отправлено XMan , 08-Фев-03 01:38 
>XMan - ну ты меня удивляешь - параметры идут с 0, а
>0-вой параметр по соглашению есть имя программы.
>
>Поэтому при использовании execl сначала указывается полный путь, затем имя программы, затем
>аргументы командной строки, в конце NULL. Поэтому надо так:
[skiped]

В последнее время я сам себя удивляю. И часто удивления неприятные. Блин, шо ж происходит-то ? :(


"RE: как запустить одно приложение из другого"
Отправлено vvk , 08-Фев-03 10:37 
привет. спасибо огромное за разъяснения.
экспериментировать наверное не буду (так как надо браться за связь с сервером по http), если только применение execl не является чем то лучшим
чем system.

>Да вообще-то все правильно, только нужно указывать полный путь к import -
>например у меня:
>which import
>/usr/bin/import
>
>Короче попробуйте так (если не лень):
>execl("/usr/bin/import","import","-window","root","bb.jpg",NULL);
>
>XMan - ну ты меня удивляешь - параметры идут с 0, а
>0-вой параметр по соглашению есть имя программы.
>
>Поэтому при использовании execl сначала указывается полный путь, затем имя программы, затем
>аргументы командной строки, в конце NULL. Поэтому надо так:
>
>execl("/bin/sh","/bin/sh","-c","программа","параметр1",...,"параметр N",NULL);
>
>(вместо второго /bin/sh в данном случае можно поставить все что угодно)