Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> c++ shell, Подскажите литературу 
:(
    Опции темы
Soeti
Дата 23.7.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.4.2008

Репутация: нет
Всего: нет



Начал изучать с++, но под линухом. Скачал пару книг, но как оказалось в них ничего нет по программированию shell

Типичная проблема: написать клон команды cd.
Простым setenv()  изменить параметр PWD не получается. Вычитал, что поскольку я нахожусь в шеле, то такой вариант в лоб не катит и нужно учиться работать с шелом.
Подскажите литературу, где можно прочитать про программирование на c++ под шелл.
PM MAIL   Вверх
djamshud
Дата 23.7.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM   Вверх
Tima22
Дата 25.7.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 21.7.2010

Репутация: нет
Всего: 1



никакя книга не содержит полной информации - тебе надо man pages твоей системы. Например для free bsd это http://www.freebsd.org/cgi/man.cgi - вводишь команду и смотришь как использовать. Если есть конкретная постановка задачи, можеши поискать соответсвующею команду в интернете или спросить здесь.

p.s. Процесс что создаёт копию называется fork, а потом уже изменяется с помошью exec "семьи"
PM MAIL   Вверх
sdukshis
Дата 28.7.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



Для смены текущего каталога в POSIX предусмотрен соответствующий вызов:
Код

#include <unistd.h>

int chdir(const char *path);

http://www.opengroup.org/onlinepubs/009695...ions/chdir.html

По поводу литературы: если работаете с POSIX, то лучшее, что могу порекомендовать это Стивенс: UNIX Профессиональное программирование http://www.books.ru/shop/books/503720
PM MAIL   Вверх
bsa
Дата 29.7.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(sdukshis @  28.7.2010,  21:36 Найти цитируемый пост)
Для смены текущего каталога в POSIX предусмотрен соответствующий вызов:

меняет каталог текущего процесса, а не родительского. А команда cd меняет каталог шелла, т.е. если бы она была программой, то меняла бы каталог родителя.
PM   Вверх
MAKCim
Дата 31.7.2010, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



djamshud, 
Ковырять ничего не надо, есть системный вызов execve (man 2 execve)

кроме всего прочего он принимает параметр - адрес массива строк переменных окружения

через export bash помечает переменную окружения как экспортируемую и при порождении процесса копирует ее в массив, передаваемый дальше в execve третьим параметром


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
djamshud
Дата 31.7.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



MAKCim, я ступил. Думал, при export дочерний bash меняет переменную в родителе.

В таком случае видимо нет нехакерского способа изменить текущее положение в файловой системе (pwd) баша своей программой. Как я понял, ТС именно это нужно.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1884 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.