| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > c++ shell |
| Автор: Soeti 23.7.2010, 10:08 |
| Начал изучать с++, но под линухом. Скачал пару книг, но как оказалось в них ничего нет по программированию shell Типичная проблема: написать клон команды cd. Простым setenv() изменить параметр PWD не получается. Вычитал, что поскольку я нахожусь в шеле, то такой вариант в лоб не катит и нужно учиться работать с шелом. Подскажите литературу, где можно прочитать про программирование на c++ под шелл. |
| Автор: djamshud 23.7.2010, 18:37 |
| Когда вы запускаете программу, в ней создается свой environ (переменные окружения) - копия родительского (этим занимается системный вызов exec, если мне память не изменяет). Таким образом setenv изменяет только свой environ. Аналогично chdir изменяет текущую директорию своего процесса, а не родительского bash-а. Изменить environ родительского процесса нельзя. Добавлено через 5 минут и 22 секунды С другой стороны, можно попробовать расковырять исходники bash-а и посмотреть, как в нем устроено межпроцессное взаимодействие, благодаря которому дочерний процесс посредством bash-команды export передает переменную в родитеский процесс. |
| Автор: Tima22 25.7.2010, 01:23 |
| никакя книга не содержит полной информации - тебе надо man pages твоей системы. Например для free bsd это http://www.freebsd.org/cgi/man.cgi - вводишь команду и смотришь как использовать. Если есть конкретная постановка задачи, можеши поискать соответсвующею команду в интернете или спросить здесь. p.s. Процесс что создаёт копию называется fork, а потом уже изменяется с помошью exec "семьи" |
| Автор: sdukshis 28.7.2010, 20:36 | ||
Для смены текущего каталога в POSIX предусмотрен соответствующий вызов:
http://www.opengroup.org/onlinepubs/009695399/functions/chdir.html По поводу литературы: если работаете с POSIX, то лучшее, что могу порекомендовать это Стивенс: UNIX Профессиональное программирование http://www.books.ru/shop/books/503720 |
| Автор: MAKCim 31.7.2010, 08:47 |
| djamshud, Ковырять ничего не надо, есть системный вызов execve (man 2 execve) кроме всего прочего он принимает параметр - адрес массива строк переменных окружения через export bash помечает переменную окружения как экспортируемую и при порождении процесса копирует ее в массив, передаваемый дальше в execve третьим параметром |
| Автор: djamshud 31.7.2010, 14:49 |
| MAKCim, я ступил. Думал, при export дочерний bash меняет переменную в родителе. В таком случае видимо нет нехакерского способа изменить текущее положение в файловой системе (pwd) баша своей программой. Как я понял, ТС именно это нужно. |