![]() |
|
Модераторы: xvr |
![]()
|
|
| Ak47black |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Здравствуйте.
Вот такой у меня код вышел шелла
Он полностью рабочий, но мне осталось ещё реализовать следующие вещи:
Для меня очень туманна сама суть реализации всего этого. Подскажите(подтолкните) пожалуйста как это можно реализовать? На функции с именем начитаемся с parse не обращайте внимания (они очень громоздкие но работают).
Незнаю совсем как например реализовать отлавливание EOF/Ctrl+D Как мне следует это дело отлавливать? Буду рад если кто-то хоть что-то подскажет |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
read возвращает в этом случае 0 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Хорошо, немного яснее стало.
А где мне-бы реализовать сам отлов вводимых команд? Я могу например создать для этого дочерний процесс через fork, но как мне тогда из него остановить главный процесс со всеми дочерними? Это сообщение отредактировал(а) Ak47black - 2.10.2010, 17:04 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
что-то вы усложняете
в основном процессе принимайте ввод, парсите, создаете процессы для выполнения и дальше принимаете -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
MAKCim,
Вы правы. Мне тут действительно надо так делать. А можно-ли как-то понять что запущенный процесс ничего не возвращает? (например sleep ) Это сообщение отредактировал(а) Ak47black - 2.10.2010, 18:54 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
что вы имеете в виду под возвращением? вывод на stdout?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Да.
У меня проблема в том что getline (134 строка) по второму циклу проскальзывает (ничего не спрашивая пользователя выполняется например если ввести "sleep 2") И я подозреваю что это из-за того что я делаю dup2(pipes[i][1], 0); на 191 строке. Вот такой код у меня на дынный момент
Это сообщение отредактировал(а) Ak47black - 2.10.2010, 21:05 |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Никаких нету идей по этому поводу?
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
У меня есть идея, что вы не отделили мух от котлет
Нормальный *nix shell умеет запускать команды в 2х режимах. Если в конце командной строки присутствует знак '&', то команда запускается в background'е. При этом stdin для нее направляется от /dev/null (реально там чуток не так, но в первом приближении можете считать именно так). Сама команда запускается в fork из шела, шел при этом продолжает вводить другие команды и исполнять (и отлавливать EOF на своем stdin). Если же знака '&' нет, то команда запускается в forground'е. Шел на время ее выполнения блокируется (точнее отключается от своих потоков ввода и вывода) и ждет завершение запущенной команды. |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Знаете, Вы мне открыли глаза на это дело. Спасибо Вам огромное за ответ.
Завтра попробую всё это на свежую голову Это сообщение отредактировал(а) Ak47black - 4.10.2010, 22:31 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под 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. |