[C] uproszczona powłoka
- lolq
- 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
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?
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?
- karmelek
- 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
To jest jakieś zadanie domowe czy komercyjna oferta?
- mario_7
- 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
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.
Forum nie jest od rozwiązywania zadań domowych, więc jeśli nie sprecyzujesz problemu, to temat wyląduje w koszu.
- lolq
- 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
to jest zadanie z systemów na studia
to mam:
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?
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);
}
- karmelek
- 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
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.
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.
- lolq
- 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
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ę ;]
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ę ;]
- karmelek
- 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
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.
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.
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?
http://pl.wikipedia.org/wiki/Lista1. Wbudowaną obsługę zmiennych środowiskowych, tzn. możliwość ustawiania i wyświetlania
dowolnej zmiennej środowiskowej.
Zakładając, że katalog roboczy przechowujemy w zmiennej to nie widzę problemu z wyświetleniem tego.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.
Sam piszesz ze już to masz.4. Wbudowane polecenie ls wyświetlające zawartość katalogu roboczego (jeżeli podane bez
argumentów) lub dowolnego podanego jako argument.
jw. Tylko inny format wyjścia.5. Wbudowane polecenie ll odpowiadające poleceniu ls l.
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?
- lolq
- 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
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)
- karmelek
- 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
Hmmm, dla mnie to oczywiste byłololq 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)

- 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
E... że na pewno? A nie że nie można korzystać z funkcji system?lolq pisze:nie można korzystać z funkcji systemowych
Podobnie brzmi...
Jakoś sobie nie wyobrażam napisania czegokolwiek shellopodobnego bez pipe i exec*... ale ja to mam taką słaba wyobraźnię...
- karmelek
- 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
W ogóle - rzuć to zadanie w pełnym brzmieniu, chętnie dla wprawki po sesji sobie zaklepię.
- lolq
- 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
zgadza się , funkcji system, sorry za wprowadzenie w błąd 
tylko to zadanie jest mi potrzebne na jutro xD

tylko to zadanie jest mi potrzebne na jutro xD
- karmelek
- 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
Dopisałeś coś nowego>
- lolq
- 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
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:
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
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;
}
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości