Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] Mini-Shell

  1. #1
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150

    [C] Mini-Shell

    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

    Pochi vivono: la maggior parte della gente esiste e nulla più...

  2. #2
    non mi sembra che le shell gestiscano i processi.
    ciao
    sergio

  3. #3
    codice:
    #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 ?

  4. #4
    Utente di HTML.it L'avatar di tom69
    Registrato dal
    Mar 2004
    Messaggi
    150
    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
    Pochi vivono: la maggior parte della gente esiste e nulla più...

  5. #5
    Appunto un punto di partenza.
    Se vuoi sapere qualcosa di specifico chiedi pure.

  6. #6
    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

  7. #7
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.