Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    86

    [C] execvp() non esegue nulla????

    Allora io devo leggere un file di testo nel quale ci sono righe così
    formate:
    "30 comando parametri", e devo far eseguire i vari comandi quando il
    tempo di quella riga scade, per esempio se ho una riga : 30 ls -a,
    vuol dire che dopo 30 sec dall'avvio del programma devo eseguire ls
    -a.
    Il codice che allego mi stampa tutto perfettamente, ma quando deve eseguire il comando non lo fa, cioè da quello che ho capito in argv[0] non c'è nessun comando che può eseguire.Ma la cosa strana è che nello schermo, il pritnf di argv[0] mi dà esattamente il comando che deve leggere.

    Per favore aiutatemi, dov'è l'errore??
    come faccio??

    ecco il codice:

    /**Leggo riga per riga con fgets()**/
    s=dim;
    while((fgets(s,80,fp))){
    argv=split_arg(s," ",&argc);
    i = 1;
    temp = ritornaTempo(argv,argc);
    printf("Tempo: %d\n", temp);
    printf("Comando: %s\n", argv[0]); //qui mi stampa esattamente il
    comando
    argc--;
    argv[argc]=NULL;
    while(i!=argc){
    printf("parametri: %s\n", argv[i]);
    i++;
    }
    }

    IFERROR(pid=fork(),"generando il figlio");
    if(pid==0){
    /*siamo nel figlio*/

    IFERROR(execvp(argv[0],argv),"ERRO NELLA EXEC");
    /*non esegue niente perchè in argv[0] non c'è nessun comando*/
    printf("non ho potuto eseguire %s\n", argv[0]);
    }

    IFERROR(letti, "main: Errore in lettura");
    IFERROR( close(fd), "main: Errore in chiusura");

    return 0;
    }

    int ritornaTempo(char **argv,int argc){
    int i = 1;
    int temp = atoi(argv[0]);
    while((i-1)!=argc){
    argv[i-1] = argv[i];
    i++;
    }
    return temp;
    }

    grazie!!

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    non consoco questa funzione, comuqnue...prova a fare un esempio piu semplie in cui immposti i parametri dei comandi manualmente; prova ad esegurie un file eseguibile al posto di un comando di shell.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    86
    Ciao!
    Ho capito che il programma entra prima nel figlio che creo e poi mi fa le stampe TEMPO,COMANDO,PARAMETRI, forse per questo che non mi esegue niente, perchè entrando nel figlio per prima cosa, su agrv[0],non c'è niente, ma ci sarà solo nel figlio ci entra con lo stesso ordine con cui è scritto il progr.

    Infatti ho provato a mettere delle stampe di prova dentro il figlio e così ho capito che prima esegue queste istruzioni:
    codice:
    IFERROR(pid=fork(),"generando il figlio"); 
    if(pid==0){ 
    /*siamo nel figlio*/ 
    
    IFERROR(execvp(argv[0],argv),"ERRO NELLA EXEC"); 
    /*non esegue niente perchè in argv[0] non c'è nessun comando*/ 
    printf("non ho potuto eseguire %s\n", argv[0]); 
    }
    e poi sale su e mi stampa le seguenti istruzioni:
    codice:
    /**Leggo riga per riga con fgets()**/ 
    s=dim; 
    while((fgets(s,80,fp))){ 
    argv=split_arg(s," ",&argc); 
    i = 1; 
    temp = ritornaTempo(argv,argc); 
    printf("Tempo: %d\n", temp); 
    printf("Comando: %s\n", argv[0]); 
    argc--; 
    argv[argc]=NULL; 
    while(i!=argc){ 
    printf("parametri: %s\n", argv[i]); 
    i++; 
    }
    invece l'ordine del codice è inverso, perchè prima deve entrare nel while del'fgets() e poi creare il figlio....
    cosa devo fare????aiutatemi....

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 © 2025 vBulletin Solutions, Inc. All rights reserved.