Wpis z mikrobloga

Mirki, próbuję napisać microshella w C dla linuxa. Ma on sobie tam wykonywać programy typu ls, cat itd. z argumentami, jak i bez.

Więc co działa:
- dzielenie wejścia na tokeny

Trochę:
- komendy bez argumentów (czasami działają i na końcu musi być spacja)

Nie działają:
- kompilacja daje warning o złych typach którego nie rozumiem
- komendy bezargumentów muszą mieć spację na końcu(fork: No such file or directory)
- komendy z argumentami wykonywane są jakby nie miały argumentów
- komenda exit nie kończy pętli (wykonuje się fork)

Kod tutaj

Pewnie źle wywołuję execlp ale nie wiem jak mam to naprawić.

#naukaprogramowania #linux
  • 22
@Anteras: Możesz wyczyścić śmieci dając zamiast input[strcspn(input, "\r\n")] = 0;
for(i=strcspn(input, "\r\n");i<99;++i)
{
input[i]=0;
}

i pamiętając o przeniesieniu deklaracji i przed tą pętlą. ( ͡° ͜ʖ ͡°)
@Alkreni: sam nie wiem, ale przy okazji naprawiłeś komendy bez argumentów, teraz wykonują się poprawnie i nie trzeba dodawać spacji na końcu, już prawie zrobione, dzięki xD
@Anteras: kilka uwag:
- exit nie działa, bo fgets dorzuca znak nowej linii na końcu, ale to już udało Ci się rozgryźć,
- break w linii 21 jest ok,
- unikaj strcpy jak ognia, chyba że masz pewność że w buforze docelowym jest wystarczająca ilość miejsca aby pomieścić bufor źródłowy
- jak robisz forka, to w rodzicu powinieneś poczekać na dziecko (wait/waitpid).
Udało mi się poprawić Twój program: https://pastebin.com/FHyCtAFE
Jak będziesz
@Alkreni Albo jestem głupi albo nie da się na mobilnej aplikacji wykopu wysłać PW xD Wyśle ci później bo tutaj nie mogę, jestem trochę na celowniku, a mam dosyć charakterystyczny błąd.