Allora gente, mentre continuavo le mie esercitazioni per l'esame di Sistemi Operativi mi sono imbattuto in una traccia che non comprendo a pieno, e che quindi ho deciso di condividere con voi..
magari qualcuno di voi sa aiutarmi a capirla, eccola:
Scrivere un esempio di programma di shell che manda in esecuzione processi sia in foreground che in background (senza attendere la terminazione del processo prima di accettare una nuova richiesta).
Ora i punti più oscuri sono:
Come faccio a creare processi in foreground/background?
Ma soprattutto, che tipo di processi dovrei aprire? (faccio delle semplici fork() ed eseguo delle operazioni in background o foreground in base ad una serie di comandi codificati nella shell?)
detto questo, aspetto risposta,
grazie in anticipo
easly
- -- -- EDIT -- -- -
Aggiungo il codice che ho creato per gestire la shell (che è funzionante.. ma che ovviamente al momento non fa nient'altro tranne che stampare a video delle informazioni in base a due comandi:
foreground e background... altrimenti stampa un errore... se si digita exit si chiude la shell.
Ecco il codice:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
int pid, i, n, exit = 0;
char buffer[100], prompt[] = "shell:> ";
while(exit != 1) {
write(1, prompt, 8);
bzero(buffer, 100);
n = read(0, buffer, 100);
buffer[n-1] = buffer[n];
if(strcmp(buffer, "exit") == 0) {
printf("Shell terminata\n");
return 0;
}
pid = fork();
if(pid < 0)
printf("Errore nella generazione del processo.\n");
else if(pid == 0) {
if(strcmp(buffer, "foreground") == 0) {
printf("Il processo sara avviato in foreground\n");
}
else if(strcmp(buffer, "background") == 0) {
printf("Il processo sara avviato in background\n");
} else
printf("Comando non riconosciuto\n");
exit = 1;
}
}
return 0;
}