Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    [ C ] Mi dire dove sta l'errore ?!?

    Ditemi dove sta l'errore... :master: :master: :master:

    /*
    File: microshell-0.c
    Specifica: piccola shell che esegue un comando passato (con argomenti) dallo STDIN, ne restituisce codice di uscita e torna ad attendere un successivo comando
    Data: 28-04-2004
    Problema: Non considera gli argomenti passati. Inoltre bisogna "per forza" dare uno spazio dopo aver digitato il comando sullo standard input
    */

    #include <sys/types.h>
    #include "sysmacro.h"
    #include "util.h"
    #define TRUE 1
    #define MAXCOMMANDLENGTH 100

    int main (int argc, char * argv[])
    {
    int pid;
    char * stringa = (char*) malloc(sizeof(char) * MAXCOMMANDLENGTH);/*Al massimo un comando di 100 caratteri*/
    char**a;
    int n;
    int contaComando = 0;
    int statoComando = 0;
    while(TRUE)
    {
    contaComando++;
    printf("PROMPT>");
    fgets(stringa, MAXCOMMANDLENGTH, stdin);
    a = split_arg(stringa, " ", &n);
    if ((pid = fork()) == -1)
    {
    perror("Padre> errore nella fork");
    exit(0);
    }
    if (pid == 0)
    {/*FIGLIO*/
    execvp(a[0], &a[1]);//<-- L'errore e' qua ?!?
    perror("Figlio> errore nella exec");
    /*Perror solo in caso d'errore*/
    }
    else
    {/*PADRE*/
    wait(&statoComando);
    printf("Padre> eseguito comando n.: %d ; stato di uscita : %d\n", contaComando,statoComando);
    }

    }
    return(0);/*Mai...*/
    }



    Questo e', invece, il codice dove si trova la funzione split_args(...);

    /*
    File: util.c
    Specifica: funzioni di utilita'
    */

    /* include per stat */
    #include <sys/stat.h>

    /* include per malloc e strlen */
    #include <stdlib.h>
    #include <string.h>

    #include "util.h"
    .....
    .....
    .....

    @description -- split_arg ritorna il vettore dei token in una stringa separati da un qualsiasi carattere separatore

    @param -- linea, la linea da cui estrarre i token
    @param -- separatori, i caratteri separatori
    (es ": ;", due punti, blank e puntevvirgola)
    @param -- numerotoken (OUTPUT) contiene il numero dei token trovati

    @return -- puntatore all'array di token (stesso formato di argv) */

    char ** split_arg(char *linea, char *separatori, int *numerotoken)
    {
    int i = 0; /* numero token trovati */
    char **argv; /* vettore dei token */
    char *copialinea; /* copia della linea */
    char **indirizzocopialinea = &copialinea; /* punta a copialinea */

    /* copia la stringa argomento */
    copialinea = malloc( strlen(linea) + 1 );
    strcpy(copialinea, linea);

    /* alloca la prima posizione vettore dei token */
    argv = malloc(sizeof(char *));

    while( (argv[i] = strsep(indirizzocopialinea, separatori)) != NULL ) {

    /* ancora un token */
    i++;

    /* ridimensiona vettore dei token */
    argv = realloc(argv, (i + 1) * sizeof(char *));
    }

    /* scrive il numero di token trovati */
    *numerotoken = i;

    /* libera lo spazio allocato */
    free(copialinea);
    return(argv);
    }

    THKS

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Dai ragazzi dateci un'occiata, please !!!

  3. #3
    sto imparando il C da poco...però credo che per darti una mano dovremmo sapere cosa c'è nei due files inclusi... altrimenti senza quelli non si può compilare il sorgente e capire qual è l'errore...


    cmq il compilatore che cosa ti dice ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da rocco.g
    sto imparando il C da poco...però credo che per darti una mano dovremmo sapere cosa c'è nei due files inclusi... altrimenti senza quelli non si può compilare il sorgente e capire qual è l'errore...


    cmq il compilatore che cosa ti dice ?
    Il file "sysmacro.h" contiene soltanto delle macro. Utilizzato moltissime volte sono certo non ci siano errori. util.h contiene solo le dichiarazioni delle funzioni definite nel file util.c che ho stampato. L'errore si trova in cio' che ho scritto. I due 'punti' che sicuramente generano errore sono o la fgets o la split_args.

  5. #5
    fammi avere in qualke modo anke gli altri due files così lo compilo sul mio pc... perchè altrimenti non so come fare a correggere l'errore dato che non sono espertissimo di C e senza le infos del compilatore non saprei mettere mano...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  6. #6
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da rocco.g
    fammi avere in qualke modo anke gli altri due files così lo compilo sul mio pc... perchè altrimenti non so come fare a correggere l'errore dato che non sono espertissimo di C e senza le infos del compilatore non saprei mettere mano...
    I files eccoli qua: sysmacro.h
    util.c
    util.h

    Devi importare sysmacro.h e util.h

    Poi, fai cosi:

    -gcc -c utilc //Crea il file oggetto util.o
    -gcc -o nomefile nomefile.c util.o //Crea l'eseguibile nomefile linkando il file oggetto util.o
    -nomefile//Esecuzione

  7. #7
    ho provato a compirarlo...
    mi ha dato tre warning:

    (24) : warning C4013: 'S_ISDIR' undefined; assuming extern returning int
    (101) : warning C4013: 'strsep' undefined; assuming extern returning int
    (101) : warning C4047: '=' : 'char *' differs in levels of indirection from 'int '


    lo guardo più accuratamente domani e ti faccio sapere...
    spero cmq che qualcun altro più esperto prenda parte alla discussione e ti possa aiutare...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  8. #8
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    La funzione split_arg funziona correttamente. L'ho appena provata a parte e fa cio' che ci si aspetta. L'errore continuo a pensare sia nel modo in cui i parametri vengono passati alla execvp. Pero'...

  9. #9
    credo anke io che l'errore stia nel come sono stati passati a parametri alla funzione in questione, però non so come risolverlo, fai una cosa perchè non cambi il titolo del topic ? così magari qualcuno che ne sa di più lo legge e ti aiuta...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

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.