Pozdravljeni!
Domača naloga pri predmetu OS (informatika) se glasi:
Program, ki smo ga naredili na vajah, je preprosta izvedba lupine. V
trenutni različici zna pognati zunanje ukaze vendar brez stikal in dodatnih
argumentov. Prav tako ne pozna nobenega notranjega ukaza in napačno
obravnava prazno ukazno vrstico.
Program dopolnite na naslednja načina:
1. Program naj pravilno obravnava prazno ukazno vrstico in
naj pravilno obravnava notranji ukaz "exit".
2. Program naj pravilno obravnava zunanje ukaze z stikali in argumenti.
Domača naloga ni obvezna. Rešite lahko posamezno ali obe alineji. Vsaka
izmed alinej je vredna en plus. Vaše rešitve pričakujem do pričetka
naslednjih vaj.
Izhodiščni program je podan v nadaljevanju sporočila in je nekoliko
dopolnjena različica programa iz vaj; dodani sta vrstici 25 in 26, ki
poskrbita za primer, ko funkciji execlp ne uspe izvesti zunanjega ukaza.
Lep pozdrav!
Marko
---
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#define LINE_BUFFER_SIZE 4096
int main(void)
{
char lineBuffer[LINE_BUFFER_SIZE];
int pid;
int status;
printf("[mash]# ");
while (fgets(lineBuffer,LINE_BUFFER_SIZE, stdin) != NULL)
{
pid = fork();
if (pid == 0)
{
// proces otrok
lineBuffer[strlen(lineBuffer) - 1] = 0;
execlp(lineBuffer, lineBuffer, (char *) 0);
// če execlp ne uspe, izpiši napako in končaj
izvajanje
printf("mash: %s\n", strerror(errno));
exit(1);
}
else
{
// proces oče
waitpid(pid, &status, 0);
if (pid < 0) printf("cannot fork\n");
printf("[mash]# ");
}
}
printf("\n");
}