[C] uproszczona powłoka

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

[C] uproszczona powłoka

Post autor: lolq »

mam takie zadanie:


W ramach projektu należy stworzyć uproszczoną wersję powłoki pracującej w systemie Linux.
Minimalna funkcjonalność powinna obejmować:
1. Wbudowaną obsługę zmiennych środowiskowych, tzn. możliwość ustawiania i wyświetlania
dowolnej zmiennej środowiskowej.
2. Wbudowane polecenie pwd wyświetlające aktualny katalog roboczy
3. Wbudowane polecenie cd pozwalające na zmianę katalogu roboczego. Polecenie powinno
akceptować nazwy ścieżkowe. Wykonane bez argumentu powinno zmieniać katalog roboczy
na katalog domowy użytkownika.
4. Wbudowane polecenie ls wyświetlające zawartość katalogu roboczego (jeżeli podane bez
argumentów) lub dowolnego podanego jako argument.
5. Wbudowane polecenie ll odpowiadające poleceniu ls l.
Funkcjonalność jak w pkt 4.
6. Możliwość uruchomienia dowolnego programu poprzez podanie jego nazwy (ew. nazwy
ścieżkowej).

do weekendu muszę mieć gotowe, a mam jedynie polecenie ls wyświetlające listę katalogów, nie mam zbytnio pojęcia jak resztę dodać, nawet ze 2 jakieś polecenia inne, jak to złożyć w całość? Może ktoś pomóc?
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

To jest jakieś zadanie domowe czy komercyjna oferta?
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8655
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: mario_7 »

Konkrety - co zrobiłeś i w którym miejscu masz problem (w sensie - w kodzie źródłowym)?

Forum nie jest od rozwiązywania zadań domowych, więc jeśli nie sprecyzujesz problemu, to temat wyląduje w koszu.
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: lolq »

to jest zadanie z systemów na studia

to mam:

Kod: Zaznacz cały

#include <dirent.h> 
#include <stdio.h> 

int main(void)
{
    char komenda[100];
    scanf("%s",komenda);
    if(strcmp(komenda,"ls")==0)
{                           
  DIR           *d;
  struct dirent *dir;
  d = opendir(".");
  if (d)
  {
    while ((dir = readdir(d)) != NULL)
    {
      printf("%s\n", dir->d_name);
    }

    closedir(d);
  }
}
else
{
  printf("Blad!\n");
}
  return(0);
}
teraz nie wiem jak do tego dodać inne polecenia dodałem też jak widać porównanie stringów, po wpisaniu "ls" wyświetla listę katalogów w aktualnym folderze, po wpisaniu czegoś innego błąd, fakt to działa, ale nie bardzo się orientuję też jak mogło by to wyglądać przy innych poleceniach, mam do każdego od nowa dawać string?
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

1. Zdekomponować problem.
2. Do zmiennych środowiskowych zaimplementowałbym sobie listę jednokierunkową z prostym interfejsem rtypu serarch, add, remove.
3. Do przechowywania dostępnych poleceń jw, ewentualnie jakaś tablica stringów - jeden czort.
4. Wszystki operacje plikowe jakie tu masz są do znalezienia w google - sprawdziłem właśnie.
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: lolq »

no to jak znalazłeś to możesz podać?
właśnie w tym sęk, że ja nie znalazłem i po to też temat założyłem...
jeśli bym miał każdego polecenia kod to jakoś myślę bym to sklecił w kupę ;]
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

Erm, to jakieś studia są? To zadanie naprawdę nie jest trudne, wystarczy odrobina chęci. Programowanie i nauka zazwyczaj nie polega na kopiowaniu kodu "skądś" tylko na tworzeniu własnego.
1. Wbudowaną obsługę zmiennych środowiskowych, tzn. możliwość ustawiania i wyświetlania
dowolnej zmiennej środowiskowej.
http://pl.wikipedia.org/wiki/Lista
2. Wbudowane polecenie pwd wyświetlające aktualny katalog roboczy
Zakładając, że katalog roboczy przechowujemy w zmiennej to nie widzę problemu z wyświetleniem tego.

3. Wbudowane polecenie cd pozwalające na zmianę katalogu roboczego. Polecenie powinno
akceptować nazwy ścieżkowe. Wykonane bez argumentu powinno zmieniać katalog roboczy
na katalog domowy użytkownika.
4. Wbudowane polecenie ls wyświetlające zawartość katalogu roboczego (jeżeli podane bez
argumentów) lub dowolnego podanego jako argument.
Sam piszesz ze już to masz.
5. Wbudowane polecenie ll odpowiadające poleceniu ls l.
jw. Tylko inny format wyjścia.

6. Możliwość uruchomienia dowolnego programu poprzez podanie jego nazwy (ew. nazwy ścieżkowej).
Zależnie od systemu - funkcje systemowe się kłaniają.

W których miejscach w kodzie masz problemy?
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: lolq »

tak, studia informatyczne, chęci są (ale entuzjazm opadł) właśnie w momencie gdy doczytałem dalszą treść, że nie można korzystać z funkcji systemowych, jeśli by można do standardowej powłoki się odwoływać to nie byłby to problem, a tu trzeba od podstaw (wcześniej tego nie napisałem)
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

lolq pisze:tak, studia informatyczne, chęci są (ale entuzjazm opadł) właśnie w momencie gdy doczytałem dalszą treść, że nie można korzystać z funkcji systemowych, jeśli by można do standardowej powłoki się odwoływać to nie byłby to problem, a tu trzeba od podstaw (wcześniej tego nie napisałem)
Hmmm, dla mnie to oczywiste było :P Nie wiem, jakoś czuję, że na pierwszym roku bym to spokojnie zaklepał, ale nie w środku sesji, bo już na kod nie mogę patrzeć:P
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] uproszczona powłoka

Post autor: ethanak »

lolq pisze:nie można korzystać z funkcji systemowych
E... że na pewno? A nie że nie można korzystać z funkcji system?
Podobnie brzmi...

Jakoś sobie nie wyobrażam napisania czegokolwiek shellopodobnego bez pipe i exec*... ale ja to mam taką słaba wyobraźnię...
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

W ogóle - rzuć to zadanie w pełnym brzmieniu, chętnie dla wprawki po sesji sobie zaklepię.
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: lolq »

zgadza się , funkcji system, sorry za wprowadzenie w błąd :P
tylko to zadanie jest mi potrzebne na jutro xD
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: [C] uproszczona powłoka

Post autor: karmelek »

Dopisałeś coś nowego>
Awatar użytkownika
lolq
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 125
Rejestracja: 05 mar 2010, 02:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [C] uproszczona powłoka

Post autor: lolq »

niestety nie, bo w międzyczasie robię też jeszcze jakąś prezentację śmieszną potrzebną do zaliczenia innego bajzlu, tą powłokę teoretycznie powinniśmy robić w grupach 2-3 osobowych, ale to teoretycznie... w praktyce jest tak, że ja się staram (raczej marnie, ale przynajmniej coś próbuję pisać i wychodzić z inicjatywą o pomoc) a kolega nie potrafi kompletnie nic, szkoda

edit:
dorobiłem pwd:

Kod: Zaznacz cały

#include <stdio.h>
#include <unistd.h>

main()
{
void pwd();


   char katalog[200];
   
   getcwd(katalog,200);
   puts(katalog);
return 0;
}
tylko jak to ładnie na pliki oddzielne podzielić i dodać porównanie stringów by po wpisaniu komendy wykonywało to co powinno a przy błędnej komendzie wyświetlało błąd? bo obecnie mam to w dwóch plikach *.c do tego w pierwszym porównanie stringów nie działa tak jak powinno bo zamiast po wykonaniu (bądź nie wykonaniu) polecenia przejść do kolejnej linii ze znakiem zachęty, program się kończy
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości