PDA

Visualizza la versione completa : [C] Mini-Shell


tom69
21-06-2008, 18:43
Salve a tutti..
ho provato a fare qualche ricerca nel forum, ma non ho trovato nulla che potesse aiutarmi. Non sono nuovo al linguaggio C e devo creare una mini-shell capace di gestire dei processi.

Ho giÓ sbirciato il codice da compagni di corso solo che mi piacerebbe crearla ex novo e capire come funziona!

Qualcuno sa consigliarmi del materiale? elettronico o cartaceo va bene ugualmente!

grazie mille

:D

mondobimbi
21-06-2008, 19:00
non mi sembra che le shell gestiscano i processi.
ciao
sergio

menphisx
21-06-2008, 19:58
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define CMD_MAX 256

extern char **environ;

int main(int argc, char **argv){

char cmd[CMD_MAX];
pid_t child;

while(1){

fgets(cmd, CMD_MAX - 1, stdin);

cmd[CMD_MAX - 1] = '\0';

if((child = fork()) == 0){

if(execvp(cmd, argv) == -1){

perror("Errore Errore");
exit(EXIT_FAILURE);

}

}
else if(child < 0){

perror("Errore Errore il processo ha dato forfeit");

}
else{

int status;
pid_t childToWait = wait(&status);

printf("%d termina R.I.P.\n", childToWait);

}

}

return 0;

}


Direi che Ŕ un buon inizio, no ?

tom69
21-06-2008, 20:22
Originariamente inviato da mondobimbi
non mi sembra che le shell gestiscano i processi.
ciao
sergio

gestione processi = terminare un processo, passare un processo da foreground a background ecc.. ecc..


@menphisx: grazie ma il codice l'ho giÓ letto da compagni del corso.. mi piacerebbe sapere xk vengono usate certe funzioni al posto di altre.. vorrei capire la logica che sta dietro!! grazie per il codice :P

menphisx
21-06-2008, 20:33
Appunto un punto di partenza.
Se vuoi sapere qualcosa di specifico chiedi pure.

mondobimbi
21-06-2008, 23:00
gestione processi = terminare un processo, passare un processo da foreground a background ecc.. ecc..
..

questo non lo fa la shell, lo fanno appositi programmi
ciao
sergio

MItaly
21-06-2008, 23:13
Originariamente inviato da tom69
@menphisx: grazie ma il codice l'ho giÓ letto da compagni del corso.. mi piacerebbe sapere xk vengono usate certe funzioni al posto di altre.. vorrei capire la logica che sta dietro!! grazie per il codice :P
Non mi pare che ci sia nulla di particolarmente complicato nel codice di menphisx nÚ che ci siano altri modi per fare questo abbozzo di shell: la shell acquisisce il nome del programma da avviare tramite fgets, avvia il processo figlio con la classica abbinata fork-exec e aspetta che esso termini con wait.

Loading