Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 5

Эмуляция командной строки Linux

25.06.2019, 07:48. Показов 1421. Ответов 3

Студворк — интернет-сервис помощи студентам
Преподаватель дал задание сделать эмуляцию пары команд из linux. Моей задачей было сделать команду ls , которая должна выводить все файлы директории. Сделал код но он не запускается , не могли бы вы проверить и починить ошибку (vector subscript out of range c).
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "windows.h"
#include <vector> 
#include <cstring> 
#include <sstream> 
#include <iostream>
#include <fstream>  
#include <direct.h>
using namespace std;
string home = "E:\\OC\\Home\\";
void generalLs(vector <string> vect)
{
    bool check1 = true, check2 = true;
    string ghjk;
    setlocale(LC_ALL, "rus");
    
        WIN32_FIND_DATA fd;
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        string str;
        str = home + vect[1];
        char* strok = new char[str.length() + 1];
        strcpy(strok, str.c_str());
        HANDLE const hFind = FindFirstFile(strok, &fd);
        do
        {
            if (hFind == INVALID_HANDLE_VALUE)
            {
                break;
            }
            if ((check1 && check2))
            {
                cout << fd.cFileName << endl;
            }
            else
            {
                if (check2 == false)
                {
                    ofstream file1(ghjk, ios_base::in | ios_base::app);
                    if (!file1)
                    {
                        cout << "Sorry" << endl;
                    }
                    else
                    {
                        file1 << fd.cFileName << endl;
                    }
                }
            }
        } while (FindNextFile(hFind, &fd));
        FindClose(hFind);
        getchar();
    
}
void Vvod(string enter)
{
    vector <string> vect;
    string word;
    stringstream potok(enter);
    bool check = false;
    while (potok >> word)
    {
        vect.push_back(word);
    }
    potok.clear();
 
    if (!(vect.empty()))
    {
        if (vect[0] == "ls")
        {
            generalLs(vect);
            check = true;
        }
        if (!(check))
            cout << "Command '" << vect[0] << "' not found" << endl;
    }
 
}
int main()
{
    setlocale(LC_ALL, "Rus.1251");
 
    bool x = true;
    string enter;
    while (x)
    {
        cout << endl << "ubuntuser@ubuntuser-VirtualBox:~$ ";
        getline(cin, enter);
        if (enter == "exit")
            return 0;
        else
            Vvod(enter);
        enter.clear();
    }
    system("PAUSE");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2019, 07:48
Ответы с готовыми решениями:

Ввод строкового значения в командной строке Linux
Помогите, пожалуйста, исправить ситуацию в лучшую сторону. Объясните, в чем причина ошибки? Имею следующую программу: // товары...

Слияних 2 файлов в третий + строки + использование командной строки
Помогите с заданием пожалуйста. Задано 2 файла, строки в которых упорядочены по алфавиту. Написать программу, осуществляющую слияние этих...

Запуск приложения из командной строки linux
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools |...

3
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,928
25.06.2019, 10:16
Цитата Сообщение от FunnyBear Посмотреть сообщение
Моей задачей было сделать команду ls
неплохое такое задание... там одних ключей сотня
Но зачем вы пытаетесь слепить вместе эмулятор командной строки и программу? Что мешает написать отдельно терминал, отдельно ls и вызывать через system?
Цитата Сообщение от FunnyBear Посмотреть сообщение
str = home + vect[1];
а если в векторе всего один элемент, и тот ls? Падение у вас возникает именно здесь.
Цитата Сообщение от FunnyBear Посмотреть сообщение
51 getchar();
пауза в конце ls?! Забудьте об этих атавизмах навсегда. Ни в конце программы, ни в конце утилиты, нигде не нужна просто пауза. Вводится команда - выводится результат - отдается управление. Все!
0
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 5
25.06.2019, 10:48  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
неплохое такое задание... там одних ключей сотня
Но зачем вы пытаетесь слепить вместе эмулятор командной строки и программу? Что мешает написать отдельно терминал, отдельно ls и вызывать через system?
Я не опытный программист пока что , и делал то что умею.К сожалению сейчас у меня немного времени и переделать не смогу. Но спасибо за замечание
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
а если в векторе всего один элемент, и тот ls? Падение у вас возникает именно здесь.
Так как решить эту проблему , не могли бы вы расписать поточнее
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,928
25.06.2019, 11:48
Сделать по-человечески, разумеется. Вместо одной сложной программы пишете две простые: sh.exe и ls.exe.
Первая читает ввод пользователя и вызывает соответствующую программу: хоть ls, хоть dir, хоть firefox - ее не волнует что там программа будет делать. Для вызова достаточно сделать system, так что код совсем простой.
Вторая, в вашем случае, ls.exe, читает argc, argv и обрабатывает уже разбитую на слова строку.
.
Если же хочется геморроя, можете проверять количество элементов вектора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2019, 11:48
Помогаю со студенческими работами здесь

Подскажите, пожалуйста, как получить данные из потока вывода командной строки Linux
С помощью Java обращаюсь к исполняемому файлу sh в Linux package javaexec; import java.io.IOException; /** * * @author...

Эмуляция Android-устройства на Linux сервере
Добрый день, уважаемые линуксоиды. Я еще чайник в unix-системах, поэтому прошу Вас подсказать, как можно развернуть эмуляцию андройд...

Работа с командной строкой linux QT
Как программно выполнить команду командной строки linux из визуального приложения в QT типо # xbacklight -set 70 Помогите...

Возврат каретки и перевод строки в приглашении Командной строки
В строке приглашения MS-DOS после вывода всей информации перейти на новую строчку. как это сделать?

Прочитать аргумент командной строки и добавить в него пробелы, чтобы длинна строки равнялась заданному числу
Прочитать аргумент командной строки и добавить в него пробелы так, чтобы длинна строки равнялась заданному числу. Пробелы равномерно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru