Powłoka na linux

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
nalesnik45
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 01 lut 2017, 16:59

Powłoka na linux

Post autor: nalesnik45 » 01 lut 2017, 17:05

Hej,

potrzebuję napisać prostą powłoke na linuxa z klasami, operującymi na plikach. Nie mam pojęcia od czego zacąć. Mógłby ktoś pomóc ?
Awatar użytkownika
enedil
Terminator
Terminator
Posty: 1306
Rejestracja: 08 wrz 2012, 16:54
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

Re: Powłoka na linux

Post autor: enedil » 02 lut 2017, 14:39

Powłoka powinna być nieskończoną pętlą czekającą na wejście i wykonującą, co zostało podane. Przykład prostej powłoki w Pythonie:

Kod: Zaznacz cały

#!/usr/bin/env python3

from os import getcwd, execvp
from sys import exit

def main():
    while True:
        try:
            line = input("{}$ ".format(getcwd()))
        except EOFError: # ctrl+d
            exit(0)
        args = line.split()
        execvp(args[0], args)

def cd(directory):
    # ...
    pass

# i.t.d.

main()
Dobrze jest, psiakrew, a kto powie, że nie, to go w mordę!

~moderatorzy
nalesnik45
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 01 lut 2017, 16:59

Re: Powłoka na linux

Post autor: nalesnik45 » 03 lut 2017, 15:25

okej, napisałam cos takiego....

czy to jest ok, czy raczej poplątane i pomieszane ?

Kod: Zaznacz cały

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fstream>
#include <sstream>
#include <sys/param.h>
#include <sys/types.h>
#include <dirent.h>
#include <fstream>
#include <windows.h>

using namespace std;

int x,t;//
list<string> l;//deklaracja zmiennych
list<string> l1;//
list<string>::iterator it;//dodanie interatora
string nazwa_pliku;//


void data()
{
    SYSTEMTIME time;//struktura SYSTEMTIME i nazwanie jej
   GetLocalTime(&time);//funkcja pobierajaca date,godzine
   HANDLE kolor;
   kolor = GetStdHandle( STD_OUTPUT_HANDLE );

   int godzina = time.wHour;
   int minuta  = time.wMinute;
   int dzien = time.wDay;
   int miesiac = time.wMonth;
   int rok = time.wYear;
   SetConsoleTextAttribute( kolor, 0x0008 );//zmiana koloru czcionki
   cout<<rok<<" "<<dzien<<" "<<miesiac<<" "<<godzina<<":"<<minuta;
   cin.get();

}

void otworz()
{
   string zawartosc_pliku;

   ifstream NowyPlik;
   NowyPlik.open("C:\\plik.txt");
   while(NowyPlik.good())
        {
        getline(NowyPlik, zawartosc_pliku);
        cout<<zawartosc_pliku<<endl;
        }
   NowyPlik.close();

   cin.get();
}

void usun()
{
    char sciezka[MAX_PATH];
    cin>>sciezka;
    remove(sciezka);

    cin.get();
    cin.get();

}

void utworz()
{
    string znak;//deklaracja zmiennej
    cout << " Wpisz swoje notatki ( aby zakoñczyæ wpisywanie w nowej lini wpisz 'wyjdz'" << endl;//komunikat
    while(znak != "wyjdz")
    {
        getline(cin,znak);
        if (znak!="wyjdz")
        {
            l.push_back(znak);
        }
    }
    cout << " Wprowadz nazwe pliku z rozszerzeniem po ." << endl;
    cin >> nazwa_pliku;
    ofstream plik;
    plik.open(nazwa_pliku.c_str());
    cout << " wprowadzenie do pliku" << endl;
    l.pop_front();
    for(it=l.begin() ; it!=l.end() ; it++) /// wpowadzenie zawartosci do pliku
    {
        plik << *it <<endl;
    }
    plik.close();
    cout << " Wyswietlenie twoich notatek" << endl;
    for(it=l.begin() ; it!=l.end() ; it++)
    {
        t++;
        cout << t << " : " << *it << endl;
    }
    t=0;
}

void kopiuj (string NazwaPliku, string sciezka)
{
	int dlugosc=0;
	char *bufor=NULL;

	fstream NowyPlik;
	NowyPlik.open(NazwaPliku.c_str());
	NowyPlik.seekg(0, ios::end);
	dlugosc=NowyPlik.tellg();
	NowyPlik.seekg(0, ios::beg);
	NowyPlik.read(bufor,dlugosc);
	NowyPlik.close();

	ofstream NowyPlik2;
	NowyPlik2.open(sciezka.c_str());
	NowyPlik2.write(bufor, dlugosc);
	NowyPlik2.close();
}

int main()
{
    string p;
    do
    {
        cout << " Wpisz polecenie: " << endl;
        cin >> p;
        if (p!="pomoc")
        {
            if (p=="utworz")
            {
                utworz();
                l.clear();
                l1.clear();
            }
            if (p=="kopiuj")
            {
                kopiuj();
                l.clear();
                l1.clear();
            }

            if (p=="usun")
            {
                usun();
                l.clear();
                l1.clear();
            }

            if (p=="data")
            {
                data();
            }



        }
        else
        {
            if(p=="pomoc")
            {
            cout << "Polecenia:" << endl;
            cout << "data ----- polecenie wyswietla aktualna godzine i date" << endl;
            cout << "utworz ----- polecenie tworzy nowy plik z zawarta zawartoscia" << endl;
            cout << "usun ----- polecenie usuwa z pliku wedlug wierszy zawartosc" << endl;
            cout << "kopiuj ----- polecenie kopiuje jeden plik do drugiego" << endl;
            cout << "wyjdz ----- polecenie zamyka dzialanie programu" << endl;

            }
            else{
            cout << " Zle wpisane polecenie wpisz pomoc, aby wyswietlic liste" << endl;
            }
        }
    }
    while(p!="wyjdz");
    cout << "  Zakonczono program  " << endl;
  return 0;
}
Awatar użytkownika
enedil
Terminator
Terminator
Posty: 1306
Rejestracja: 08 wrz 2012, 16:54
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

Re: Powłoka na linux

Post autor: enedil » 04 lut 2017, 20:02

No, poza tym, że nie jest to powłoka na Linuksa, mniej więcej tak się to robi. Spodziewałem się powłoki typu n.p. bash, ale czemu nie coś, co służy do tworzenia notatek.
Dobrze jest, psiakrew, a kto powie, że nie, to go w mordę!

~moderatorzy
ODPOWIEDZ

Wróć do „Programowanie”