Witam, muszę napisać własnego shella w C.
Chciałbym, żeby ktoś znający się na tym zweryfikował czy to co zrobiłem do tej pory ma sens.
Proszę o nie wklejanie kodów z poprawionymi błędami, tylko o wskazanie błędy z jakąś podpowiedzią. :)
Nie mam pojęcia jak napisać cd, a jako dodatkowe polecenia chciałem dodać cp i rm.
Czas na napisanie tego mam do końca tygodnia :/
Program ten powinien przyjmować na wejściu polecenia,
a następnie wykonywać działania zgodne z ich treścią. Powłoka taka powinna:
-wyświetlać znak zachęty w postaci [{path}], gdzie {path} jest ścieżką do bieżącego katalogu roboczego, ˙
-obsługiwać polecenie powłoki cd, działające analogicznie do tego znanego
nam z powłoki bash,
-obsługiwać polecenie powłoki exit, kończące działanie programu powłoki. Polecenie exit powinno przyjmować jeden opcjonalny parametr,
będący statusem wyjścia zwracanym do procesu rodzica,
-obsługiwać polecenie powłoki help, wyświetlające na ekranie informacje o autorze programu i oferowanych przez niego funkcjonalnościach,
-obsługiwać dwa inne, dowolnie wybrane polecenie powłoki,
-przyjmować polecenia odwołujące się przez nazwę do skryptów i programów znajdujących się w katalogach opisanych wartością zmiennej
środowiskowej PATH oraz umożliwiać wywołanie tych skryptów i programów z argumentami,
-przyjmować polecenia odwołujące się przez ścieżki względne oraz bezwzględne do skryptów i programów znajdujących się na dysku komputera,
a także umożliwiać ich wywołanie z argumentami,
-wypisywać komunikat błędu, gdy niemożliwe jest poprawne zinterpretowanie polecenia.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
int main()
{
while(1){
//Znak zachęty
char path[PATH_MAX];
getcwd(path, sizeof(path));
printf("%s~$ ", path);
////////////////////////////////
char polecenie[150];
int isHelp, isCd, isExit, isExit1, isFread;
scanf("%15s", polecenie);
isExit = strcmp(polecenie, "exit");
isExit1 = strcmp(polecenie, "exit-u");
isCd = strcmp(polecenie, "cd");
isHelp = strcmp(polecenie, "help");
if(isExit==0){
exit(0);
}
if(isExit1==0){
exit(1);
}
else if(isCd==0){
printf("cd\n");
}
else if(isHelp==0){
printf("Shell\n");
printf("Autor: \n");
printf("\n");
printf("Polecenia:\n");
printf("help - pomoc\n");
printf("exit - wyjscie\n");
printf("exit-u - wyjscie zakonczonie niepowodzeniem\n");
}
else{
printf("Bledne polecenie!\n");
}
}
return 0;
}