|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Artem Nozdrin 2:5022/115.156 24 Apr 2003 02:41:30 To : All Subject : Интерпретатор команд в Linux -------------------------------------------------------------------------------- Интересует как можно сделать такой интерпретатор. Если кто может - подскажите ссылки в Internet, где можно найти похожие примеры. Или может быть кто встречался с этим в книгах или сам занимался созданием подобного рода интерпретатора под Linux. Очень буду рад любой помощи. Hеобходимо создать интерпретатор команд myshell в виде многомодульного приложения типа клиент-сервер, где каждый модуль выполняет функции программного клиента и/или сервера и реализуется посредством процесса или программного потока. Модули взаимодействуют между собой через объекты IPC. Предлагается реализовать интерпретатор команд, состоящий из следующих модулей-серверов: - сервер ввода командных строк из потока stdin; - сервер исполнения интерактивной команды (сервер s0); - серверы исполнения неинтерактивных команд (серверы s1, :, sn); - файловый сервер (сервер sr); - сервер, накапливающий список команд, полученных интерпретатором для выполнения в - течение сеанса его работы (сервер sh); - сервер вывода в поток stdout результатов выполнения команд. В контексте данной архитектуры интерпретатор команд функционирует следующим образом. Сервер ввода считывает очередную командную строку из потока stdin и разбивает ее на команды. Далее он производит анализ каждой команды: определяет тип команды - интерактивная или неинтерактивная, выделяет имя команды и ее аргументы и проверяет их правильность. Если в командной строке обнаружены ошибки, в сервер вывода через неименованный канал передается сообщение об ошибке. Если ошибок нет, то команды командной строки передаются на сервер sh для добавления в список истории работы командного интерпретатора. Команды, выделенные из командной строки, направляются на серверы исполнения команд: интерактивные команды - через объект IPC1 на сервер s0 исполнения интерактивной команды, а неинтерактивные команды - через объект IPC2 на серверы s1, :, sn исполнения неинтерактивных команд. Предполагается, что сервер s0 создается сразу же после запуска интерпретатора команд, а серверы s1, :, sn в зависимости от варианта задания создаются либо сразу же после запуска интерпретатора команд, либо динамически на время выполнения неинтерактивных команд. Серверы исполнения команд при необходимости обращаются через объект(ы) IPC3 к серверу файлов для чтения или записи файлов. Объект(ы) IPC3 должны обеспечивать двустороннюю связь между серверами s0, s1, :, sn и файловым сервером. Результаты выполнения каждой команды через объект IPC4 передаются на сервер вывода в поток stdout. В начале исполнения каждой неинтерактивной команды из серверов s1, :, sn на сервер вывода передается для вывода диспетчерский номер задания (неинтерактивного процесса), присвоенный интерпретатором (серверами s1, :, sn ), и идентификатор процесса или потока, присвоенный ядром операционной системы. Порядковый номер последнего из полученных заданий хранится в объекте IPC5. IPC1 - pipe IPC2 - sem - семафоры стандарта System V; IPC3 - pipe IPC4 - pipe IPC5 - msg - очередь сообщений стандарта System V Серверы - процессы. С наилучшими пожеланиями... Artem. --- GoldED+/W32 1.1.5-1017 * Origin: Under construction... (2:5022/115.156) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/45893ea716b9.html, оценка из 5, голосов 10
|