совсем отчаялся скрестить XImage и jpeglib и прочие утилиты. поэтому
подумал, что может пока получить скриншот утилитой import, вызывая ее из кода своей программы. но как это сделать?
В C/C++ ? Семейство функций exec (например execl) ?
>В C/C++ ? Семейство функций exec (например execl) ?
ок, попробую. но уже пытался сделать execv - нифига. причем молча.
А как выглядела попытка в плане параметров функции ?
>А как выглядела попытка в плане параметров функции ?execl("import","import","-window","root","bb.jpg",NULL)
задолбался уже. делов то. сграбить картинку и сконвертить. ан нет.
А что есть первое "import" и чем оно отличается от второго ?
Короче, первой идет программа (с полным путем), за ней куча параметров командной строки и ограничитель NULL. Дабы долго не думать где лежит программа народ часто пользует конструкцию, типа:execl("/bin/sh","-c","программа","параметр1",...,"параметр N",NULL);
или еще проще:
execl("/bin/sh","-c","программа параметр1... параметр N",NULL);
В этом случае командную строку можно подставить такую же, какую ты набираешь в консоли. Естественно, всякие там кавычки и бэкслэши (если таковые присутствуют) нужно учитывать.
ok. вчера таки удалось сделать!
использовал вызов
system("import -window root asd.jpg");то, что import два раза написано, это я с какого то man-a переписал. А вообще пробовал разные варианты exec, но нифига не получалось.
>>А как выглядела попытка в плане параметров функции ?
>
>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 в данном случае можно поставить все что угодно)
>XMan - ну ты меня удивляешь - параметры идут с 0, а
>0-вой параметр по соглашению есть имя программы.
>
>Поэтому при использовании execl сначала указывается полный путь, затем имя программы, затем
>аргументы командной строки, в конце NULL. Поэтому надо так:
[skiped]В последнее время я сам себя удивляю. И часто удивления неприятные. Блин, шо ж происходит-то ? :(
привет. спасибо огромное за разъяснения.
экспериментировать наверное не буду (так как надо браться за связь с сервером по 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 в данном случае можно поставить все что угодно)