jestem w trakcie robienia swojego pierwszego projektu na zaliczenie. Ma być to prosta powłoka napisana w ANSI C. Jest kilka rzeczy, które nie działają, w związku z czym proszę o pomoc w rozwiązaniu problemu, ponieważ jutro muszę go oddać
Poniżej kod:
Kod :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <sys/stat.h>
#include <sys/types.h>
char *sciezka;
int main()
{
while(1){
char path[PATH_MAX];
getcwd(path, sizeof(path));
printf("%s~$ ", path);
char polecenie[100];
int mkdir, whoami, help, cd, wyjscie, touch;
scanf("%100s", polecenie);
wyjscie = strcmp(polecenie, "exit");
help = strcmp(polecenie, "help");
cd = strcmp(polecenie, "cd");
touch = strcmp(polecenie, "touch");
whoami = strcmp(polecenie, "whoami");
mkdir = strcmp(polecenie, "mkdir");
if(wyjscie==0){exit(0);}
else if (help==0) pomoc();
else if (cd==0) changedir(sciezka);
else if (touch==0) make();
else if (whoami==0) login();
else if (mkdir==0) nowykatalog(sciezka);
else printf("nieznana komenda\n");
}
return 0;
}
void changedir(const char *sciezka){
if (sciezka==NULL) chdir(getenv("HOME"));
else chdir(sciezka);
}
void pomoc() {
printf("Autor: \n");
printf("Funkcjonalności: \n");
printf("help - pomoc\n");
printf("exit - wyjście z programu\n");
printf("cd - Zmiana katalogu\n");
printf("touch - tworzenie pliku tekstowego w obecnym katalogu roboczym, o nazwie takiej, jak parametr\n");
printf("whoami - wyświetla aktualnie zalogowanego użytkownika\n");
}
void make() {char *nazwa;
FILE *plik;
if ((plik=fopen(("%s", nazwa), "w" ))==NULL) {
exit(1);
}
fclose (plik);
}
void login(){
printf("%s\n",getenv("USER"));
}
void nowykatalog(path) {
int kat;
kat = mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO);
if(kat==-1) printf("Nie udało się stworzyć katalogu\n");
else printf("Katalog stworzony\n");
}
1. funkcja cd - Przenosi ona tylko do katalogu głównego. Gdy podaję ścieżkę, nadal pozostaję w katalogu głównym
2. funkcja touch - tworzy pusty plik tekstowy prawidłowo, jednak jako nazwa jest jakiś dziwny ciąg znaków, nie pobiera z argumentu nazwy pliku
3. mkdir - nie działa w ogóle. Planuje jeszcze zrobić rmdir, ale muszę najpierw ogarnąć dlaczego nei działa mkdir
Proszę o pomoc w rozwiązaniu problemów, ponieważ zostało mi mało czasu, a jestem z tym troche w lesie. Wiem, że kod nie jest ładny, ale nie znam tego języka. Wszystkiego uczyłem się na bieżąco, gdy do projektu przystępowałem, potrafiłem napisać tylko hello world. Program musi tylko prawidłowo działać. Thanks from the mountain!
Edit:
Polecenie do zadania:
1. Znak zachęty - ścieżka do katalogu roboczego
2. Ma obsługiwać polecenie cd
3. Ma obsługiwać polecenie exit
4. Ma obsługiwać polecenie help
5. Ma obsługiwać dwa dowolne polecenia powłoki (wybrałem mkdir i rmdir, ale chciałbym zrobić jeszcze coś, ale nie wiem co mogłoby być proste, jeśli macie jakieś sugestie to poproszę. Deadline mnie goni, więc chciałbym sobie z tym poradzić w miare szybko)
6. Przyjmować polecenia odwołujące się przez nazwę do skryptow i programów znajdujacych się w katalogach opisanych wartoscią zmiennej środowiskowej PATH oraz umożliwiać wywołanie tych skryptów i programów z argumentami
7. Wyświetlać komunikat błędu, gdy nie może odczytać polecenia
Zakładki