![]() |
|
Модераторы: xvr |
![]()
|
|
| Soeti |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.4.2008 Репутация: нет Всего: нет |
Начал изучать с++, но под линухом. Скачал пару книг, но как оказалось в них ничего нет по программированию shell
Типичная проблема: написать клон команды cd. Простым setenv() изменить параметр PWD не получается. Вычитал, что поскольку я нахожусь в шеле, то такой вариант в лоб не катит и нужно учиться работать с шелом. Подскажите литературу, где можно прочитать про программирование на c++ под шелл. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
Когда вы запускаете программу, в ней создается свой environ (переменные окружения) - копия родительского (этим занимается системный вызов exec, если мне память не изменяет). Таким образом setenv изменяет только свой environ. Аналогично chdir изменяет текущую директорию своего процесса, а не родительского bash-а.
Изменить environ родительского процесса нельзя. Добавлено через 5 минут и 22 секунды С другой стороны, можно попробовать расковырять исходники bash-а и посмотреть, как в нем устроено межпроцессное взаимодействие, благодаря которому дочерний процесс посредством bash-команды export передает переменную в родитеский процесс. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Tima22 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 21.7.2010 Репутация: нет Всего: 1 |
никакя книга не содержит полной информации - тебе надо man pages твоей системы. Например для free bsd это http://www.freebsd.org/cgi/man.cgi - вводишь команду и смотришь как использовать. Если есть конкретная постановка задачи, можеши поискать соответсвующею команду в интернете или спросить здесь.
p.s. Процесс что создаёт копию называется fork, а потом уже изменяется с помошью exec "семьи" |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Для смены текущего каталога в POSIX предусмотрен соответствующий вызов:
http://www.opengroup.org/onlinepubs/009695...ions/chdir.html По поводу литературы: если работаете с POSIX, то лучшее, что могу порекомендовать это Стивенс: UNIX Профессиональное программирование http://www.books.ru/shop/books/503720 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
djamshud,
Ковырять ничего не надо, есть системный вызов execve (man 2 execve) кроме всего прочего он принимает параметр - адрес массива строк переменных окружения через export bash помечает переменную окружения как экспортируемую и при порождении процесса копирует ее в массив, передаваемый дальше в execve третьим параметром -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
MAKCim, я ступил. Думал, при export дочерний bash меняет переменную в родителе.
В таком случае видимо нет нехакерского способа изменить текущее положение в файловой системе (pwd) баша своей программой. Как я понял, ТС именно это нужно. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |