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

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

25.06.2019, 07:48. Показов 1390. Ответов 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,910
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,910
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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru