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

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

26.01.2017, 18:03. Показов 3103. Ответов 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
Заблокирован
26.01.2017, 18:10
А с какой именно частью нужна помощь? Что не получается?
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
26.01.2017, 18:19  [ТС]
Вот что я смог (

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// CMD.exe на Си
 
// Ввод-Вывод
#include <stdio.h> 
 
// Локализация
#include <locale.h> 
 
int main (void)
{
// Локализация
setlocale("LC_ALL", RUS);
 
// Приветствие при запуске
printf("Microsoft Windows [Version: 6.3.9600]\n");
printf("<С> Корпорация Microsoft, 2013. Все права защищены.\n");
}
 
getchar();
return 0;
Добавлено через 2 минуты
Цитата Сообщение от nimazzzy Посмотреть сообщение
А с какой именно частью нужна помощь? Что не получается?
Можно сказать, что ничего не получается(
Помощь хоть с 1 задачей из 6
Потихоньку все соберется...
Вот например приглашение командной строки, как в cmd.exe?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 18:20
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
#include <stdio.h>
#define SIZE 256
 
int main(void)
{
    char str[SIZE];
    printf("Helo, ");
    system("whoami");
    while (fgets(str, sizeof(str), stdin))
        system(str);
    return 0;
}
0
Заблокирован
26.01.2017, 18:23
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Вот например приглашение командной строки, как в cmd.exe?
У меня командная строка показывает текущую директорию. Функция GetCurrentDirectory тебе в помощь.
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
26.01.2017, 18:31  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
1
#include <stdlib.h>
#include <stdio.h>
#define SIZE 256
int main(void)
{
* * char str[SIZE];
* * printf("Helo, ");
* * system("whoami");
* * while (fgets(str, sizeof(str), stdin))
* * * * system(str);
* * return 0;
}
А пояснение?

Цитата Сообщение от nimazzzy Посмотреть сообщение
У меня командная строка показывает текущую директорию. Функция GetCurrentDirectory тебе в помощь
Хорошо, при помощи этой функции отобразим текущую директорию... (кстати, какую библиотеку для этой функции подключать?), а после текущей директории ввод команд...
Как предложить ввод команды? Scanf наверняка же не подойдет?
0
Заблокирован
26.01.2017, 18:34
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Как предложить ввод команды? Scanf наверняка же не подойдет?
fgets'ом читаем строку и парсим ее.

Добавлено через 1 минуту
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Scanf наверняка же не подойдет?
Да и он подойдет при должном применении.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 18:42
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
А пояснение?
А что тут пояснять? Считывание строки символов и вызов system с передачей считанной строки.
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
26.01.2017, 18:58  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
А что тут пояснять?
Для меня это фокусы какие то пока что (
Вижу что #define size 256 - это наверное символьная константа размером 256
system("whoami"); - что это за функция вообще не знаю, что она делает?
while (fgets(str, sizeof(str), stdin))
system(str); - знаю что это вроде как цикл с чтением символов и все

Знания в Си можно сказать нулевые, поэтому прошу помощи с подробным пояснением и комментированием...
Не так давно начал изучать программирование и такую вот задачу нашел, хочу с помощью форумчан ее решить (но чты бы все это понять, что зачем и для чего, как вообще работает командный процессор...)
0
26.01.2017, 19:09

Не по теме:

Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Не так давно начал изучать программирование и такую вот задачу нашел
Найди попроще и начни с нее.

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 19:13
Вы плаваете в основах, вам даже объяснить ничего не выйдет т.к. вы таких понятий не знаете. Прочтите какую-нибудь книгу по С, выполните начальные упражнения, тогда будем говорить на одном предметном уровне.
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
26.01.2017, 22:22  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Вы плаваете в основах, вам даже объяснить ничего не выйдет т.к. вы таких понятий не знаете. Прочтите какую-нибудь книгу по С, выполните начальные упражнения, тогда будем говорить на одном предметном уровне
Да но можно помочь с написанием, с комментариями хорошими) Я с книжками все это проанализирую, соберу и выложу на проверку
Книги есть... но с ними мне до этого задания очень далеко, а курсовую то, надо будет скоро сдавать...

Добавлено через 3 часа 0 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include<???>
 
int main(void)
{
char *DirName; // Переменная в которой будем хранить путь текущей директории
DirName = get_current_dir_name();
printf("%s", DirName);
 
getchar();
return 0;
}
Какую библиотеку подключить что бы программа выводила текущую директорию?
Или как в Си вывести текущую директорию?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 22:32
Используйте dirent.h
Для Windows нужно скачать её порт.

Добавлено через 1 минуту
Конкретно по вашему вопросу - unistd.h
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 15:44  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Конкретно по вашему вопросу - unistd.h
Пробовал так, выдает ошибку: ld returned 1 exit status. Undefined reference to get_current_dir_name

А функциями dir.h это нельзя сделать?

Добавлено через 2 минуты
Может существует какой-нибудь dos.h
из которого можно вызывать все функции cmd и все ))) ?

Добавлено через 2 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Используйте dirent.h
За дирент спасибо, сейчас буду выяснять, что это и как им пользоваться

Добавлено через 12 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// CMD.exe на Си
 
#include <stdio.h> // Ввод-Вывод
#include <locale.h> // Локализация
#include <dir.h>
 
int main (void)
{
 
    char DirName[MAXDIR]; 
    getcurdir(0, DirName);
 
setlocale(LC_ALL, "RUS"); // Локализация
 
// Приветствие при запуске
printf("Microsoft Windows [Version: 6.3.9600]\n");
printf("<С> Корпорация Microsoft, 2013. Все права защищены.\n\n");
 
printf("%s", DirName);
 
getchar();
return 0;
}
Почему не работает, что за проклятье то такое (
Пишет: warning: implicit declaration of function 'getcurdir [-Winplicit-function-declaration]'

Добавлено через 16 часов 45 минут
Ну что, нету знатоков Си что ли?
Как вывести текущую директорию?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.01.2017, 15:49
Функция getcurdir не определена стандартом ANSI C. Вы уверены, что dir.h у вас существует?
0
Заблокирован
27.01.2017, 15:52
Да их тут целый форум. Мне лично влом помогать тому, кто не хочет разобраться сам с основами. Потому что от этого толку ноль, вечно будут сыпаться вопросы по элементарным вещам, описанным в каждой без исключения книге.
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Как вывести текущую директорию?
C
1
2
3
4
5
6
7
8
#include <windows.h>
#include <stdio.h>
 
int main()
{
    wchar_t dir_buf[1024];
    GetCurrentDirectory(1024, dir_buf);
    wprintf(dir_buf);
1
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 16:23  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
1
#include <windows.h>
#include <stdio.h>
int main()
{
* * wchar_t dir_buf[1024];
* * GetCurrentDirectory(1024, dir_buf);
* * wprintf(dir_buf);
Вот и пошли вопросы ) Почему широкосимвольные wchar и wprintf?

Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Потому что от этого толку ноль, вечно будут сыпаться вопросы по элементарным вещам, описанным в каждой без исключения книге.
А вот и не будут. Просто я медленно продвигаюсь в изучении тех книг, что у меня есть...
А задание приперло делать сейчас...
0
Заблокирован
27.01.2017, 16:27
Цитата Сообщение от Bit-Leo-Need Посмотреть сообщение
Вот и пошли вопросы ) Почему широкосимвольные wchar и wprintf?
Просто так.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.01.2017, 16:36
Есть даже целое понятие для подобной ситуации - RTFM называется.
0
 Аватар для Bit-Leo-Need
1 / 1 / 0
Регистрация: 26.01.2017
Сообщений: 33
27.01.2017, 16:42  [ТС]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// CMD.exe на Си
 
#include <stdio.h>
#include <locale.h>
#include <windows.h>
#include <string.h>
 
int main (void)
{
char DirName[256];
setlocale(LC_ALL, "RUS"); // Локализация
 
    // Приветствие при запуске
    printf("Microsoft Windows [Version: 6.3.9600]\n");
    printf("<С> Корпорация Microsoft, 2013. Все права защищены.\n\n");
 
    // Вывод текущей директории
    GetCurrentDirectory(256, DirName);
    printf("%s>", DirName);
 
getchar();
return 0;
}
Вот пока что имеем.
Спасибо тому, кто сказал откуда вызывается функция GetCurrentDirectory.

Дальше идея следующая:
Программа предлагает ввести символьную строку, анализирует ее и вызывает функцию или выводит сообщение о неправильном вводе команды и предлагает ввести Help.
После правильного ввода команды отрабатывает вызванная функция и опять предлагается ввести команду.

Добавлено через 2 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
RTFM
А можно и без F
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2017, 16:42
Помогаю со студенческими работами здесь

Поочерёдный ввод команд в 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) ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru