Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33

Реализации упрощенной версии оболочки и подмножества команд интерпретатора cmd.exe на Си

26.01.2017, 18:03. Показов 3256. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с такой вот, не посильной для меня задачей..., по скольку не так давно начал осваивать программирование. Прошу помощи с написанием данного консольного приложения на Си. Если, вдруг, кто-то решит помочь, то прошу это делать с подробным объяснением и комментариями в коде (что для чего и как работает)
Возможно в Си есть библиотеки, в которых есть нужные функции. Может возможно вызывать функции ОС для их работы в нашем консольном приложении.
ПОМОГИТЕ, УМАААЛЯЮ ))

1. Должна быть реализована команда Dir с возможностью использования ключей: /o:e /o:n /a:r и возможностью перенаправления вывода информации при помощи символа >
Команда Dir должна выводить итоговую информацию - количество файлов и каталогов и суммарный объем файлов.

2. Реализация команд: cls, date, del

3. Для всех команд должен быть реализован ключ /? – вывод справочной информации по данной команде в виде текста на русском языке.

4. При вводе неверной команды должно выводиться сообщение об ошибке – неверная команда

5. Командная строка должна иметь следующий формат: команда [параметр] [> имя файла] [ключи]

6. Приглашение и приглашение командной строки при запуске по аналогии с cmd.exe
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2017, 18:03
Ответы с готовыми решениями:

Реализация упрощенной версии оболочки и подмножства команд интерпритатора cmd.exe на языке Паскаль
Помогите разобраться с курсовой по операционным системам. Изучаем командный процессор OC MS Windows cmd. Нужно написать программу на языке...

Передача команд в cmd.exe
Добрый вечер, участники форума! Столкнулся с такой проблемой. Существует библиотека MALLET написанная на Java, работает в консольном режиме...

Запуск консольных команд cmd.exe
Здравствуйте. Имеется несколько .bat файлов, которыми я иногда пользуюсь. Хочется запихнуть их в програмку с кнопочками, статусом и тд. ...

31
Заблокирован
27.01.2017, 17:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Программа предлагает ввести символьную строку, анализирует ее и вызывает функцию или выводит сообщение о неправильном вводе команды и предлагает ввести Help.
После правильного ввода команды отрабатывает вызванная функция и опять предлагается ввести команду.
Идея имеет право на жизнь. Вопрос-то в чем?
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 17:27  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Идея имеет право на жизнь. Вопрос-то в чем?
Как считать символьную строку и либо вызвать одну функцию, либо другую?
0
Заблокирован
27.01.2017, 17:31
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Как считать символьную строку
Как уже было сказано, для этого есть и fgets, и scanf.
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
и либо вызвать одну функцию, либо другую?
То, что названо тобой "функция" - должно быть реализовано твоим кодом. Пока вызывать особо нечего.
Чтобы выбрать, какой код использовать есть условия в языке, обычно это if, бывает еще switch.
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 17:38  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Как уже было сказано, для этого есть и fgets, и scanf.
Напишите пример пожалуйста? То что есть замечательный язык программирования с морем возможностей я знаю, не надо кидаться в меня этими магическими словами... Напишите пример с комментарием

Ввели например cls
если это cls, то вызовется функция system("cls");
если это не cls, то вызовется функция например error(); и после предложение ввести команду заного
0
27.01.2017, 17:49

Не по теме:

Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Напишите пример пожалуйста? То что есть замечательный язык программирования с морем возможностей я знаю, не надо кидаться в меня этими магическими словами...
Это уже край. Принципиально не буду. Пусть другие пишут. Это неуважение к чужому времени. Тебе лень прочитать элементарщину, мне лень таким помогать.

0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 23:11  [ТС]
УРААААААА!
Я решил задачу )))) любая команда cmd работает )))
Подмогните пожалуйста последний штрих...
Как создать цикл, что бы после ввода команды, опять повторялся вывод тек. директории и ввод команды?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// CMD.exe на Си
 
#include <stdio.h>
#include <locale.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
 
void error(void); // Функция вывода ошибки при не правильной команде
 
int main (void)
{
char DirName[256];
char Command[256];
 
setlocale(LC_ALL, "RUS"); // Локализация
 
    // Приветствие при запуске
    printf("Microsoft Windows [Version: 6.3.9600]\n");
    printf("<С> Корпорация Microsoft, 2013. Все права защищены.\n\n");
 
    // Вывод текущей директории
    GetCurrentDirectory(256, DirName);
    printf("%s>", DirName);
 
    scanf("%s", Command); // Ввод команды
    system(Command);
 
getchar();
return 0;
}
scanf заменю другой чтобы строку с пробелами и ключами брала )

Добавлено через 3 часа 3 минуты
Хватит вредничать, помогайте.
C
1
2
3
4
5
6
7
8
9
10
11
    
    do
    {
    // Вывод текущей директории
    GetCurrentDirectory(256, DirName);
    printf("%s>", DirName);
 
    // Ввод команды
    scanf("%s", Command);
    system(Command);
    } while ();
как правильно написать выражение в скобках while что бы при вводе exit цикл завершился?
while(Command != exit);
Не понимаю...( Помогите
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.01.2017, 23:43
Лучший ответ Сообщение было отмечено Bit-Leo-Need как решение

Решение

http://www.cplusplus.com/refer... ?kw=strcmp
1
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
28.01.2017, 00:06  [ТС]
то есть сравниваем две строки, если они совпали то это ложь и цикл завершается, а если не совпали то цикл продолжается. Правильно я понял?

Добавлено через 2 минуты
Спасибо! Понял... РРРрработает )))

Добавлено через 11 минут
Вот что имеется пока:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* CMD.exe на Си */
#include <stdio.h>
#include <locale.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
 
int main (void)
{
char DirName[256];
char Command[256];
 
setlocale(LC_ALL, "RUS"); // Локализация
 
    // Приветствие при запуске
    printf("Microsoft Windows [Version: 6.3.9600]\n");
    printf("<С> Корпорация Microsoft, 2013. Все права защищены.\n\n");
 
    do
    {
    // Вывод текущей директории
    GetCurrentDirectory(256, DirName);
    printf("%s>", DirName);
 
    // Ввод команды
    scanf("%s", Command);
    system(Command);
    } while(strcmp(Command, "exit")!=0);
 
//getchar();
return 0;
}
0
Заблокирован
28.01.2017, 00:26
Где здесь "Реализация упрощенной версии оболочки", если все, что делает программа - это запускает самые обычные команды оболочки, а не реализует их? Здесь нет реализации подмножества команд.
1
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
28.01.2017, 00:35  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Где здесь "Реализация упрощенной версии оболочки", если все, что делает программа - это запускает самые обычные команды оболочки, а не реализует их? Здесь нет реализации подмножества команд.
принципиально устранись )))
0
Заблокирован
28.01.2017, 00:53
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
принципиально устранись )))
Правда глаза колет? Возьми FindFirstFile и напиши с ее помощью тулу dir.
А, если делать как ты... То зачем заморачиваться? Предлагаю сразу одной строкой запускать из твоей программы cmd.exe. Она все эти команды знает Profit!
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
28.01.2017, 21:24  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Правда глаза колет?
Не колет ) Для меня, только начинающего знакомиться с Си (а это мой первый язык программирования) это круто и я почерпнул много нового для себя...
А этот cmd сам обращается вечно к command.com ))
scanf вот заменю на fgets и порядок...

Цитата Сообщение от nimazzzy Посмотреть сообщение
Возьми FindFirstFile
Понадобится FindFirstFileEx что бы с ключами...
Давай вместе? Ты покажешь мастер класс, а я твой код вставлю в программу... А остальные команды пусть работают через обращение функции system(); к командному процессору.

Добавлено через 7 часов 56 минут
Всем спасибо! Тему можно закрыть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2017, 21:24

Поочерёдный ввод команд в cmd.exe
Не могли бы вы подсказать как программно можно сделать поочерёдный ввод команд в одну и ту же cmd? Например: Вводим @chcp 1251 Потом ...

Работа с cmd.exe — отправка и прием команд
На сайте королевства есть пример работы с cmd.exe - отправки и прием команд вот так там считываются данные function...

Объединение команд в одну строку; CMD & bash.exe
cd C:\tools\cygwin\bin\ &amp; bash.exe &amp; cd /cygdrive/c Первая команда переход в директорию к файлу bash.exe, вторая команда запуск...

Как добавить свою команду (программу-обработчик) в число команд, выполняемых "cmd.exe"?
У меня на компьютере установлена программа для 3d моделирования. &quot;C:\Program Files\Blender Foundation\Blender\blender.exe&quot; ...

Реализация команд для своего командного интерпретатора
namespace Commands { class Program { static void Main() { while (true) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru