Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96

    C prova exec

    cia a tutti stavo facendo un po di prove con la funzione exec :

    codice:
    int main()
    {
     execl ("/home/io/prova", NULL);
     return 0;
    }
    con queste righe vorrei lanciale l'eseguibile prova .....in fase di compilazione mi da l'erore too few argument... dove sbaglio? grazie !

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Intanto rileggiti il punto 6 del regolamento sulla formattazione del codice.

    Poi, dalla documentazione di execl, si deduce che:

    La sintassi della funzione è la seguente:
    codice:
    execl(char *path, char *arg0, [char *arg1, ..., char *argN,] 0);
    Dunque:

    path: il path del comando da eseguire
    arg0: identico a path (il primo argomento di qualunque programma è sempre il programma stesso)
    arg1...argN: argomenti (facoltativi)
    L'ultimo argomento deve sempre essere obbligatoriamente 0.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    "identico a path " cosa intendi? devo scrivere la stessa cosa ? cioe' nel mio caso devo fare cosi'?:

    execl ("/home/io/prova", "/home/io/prova", NULL);

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da rufuss
    "identico a path " cosa intendi? devo scrivere la stessa cosa ? cioe' nel mio caso devo fare cosi'?:

    execl ("/home/io/prova", "/home/io/prova", NULL);
    Sì, nel senso che il primo ed il secondo parametro devono essere uguali.
    No, perchè l'ultimo parametro deve essere ZERO.

    Io proverei così:

    codice:
    execl ("/home/io/prova", "/home/io/prova", (char *) 0, 0);
    Non ho modo di fare delle prove ora, ma se la memoria non mi inganna dovrebbe andare...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    no non va :master:

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dire "no, non funziona" è come andare dal medico e dire "sto male".
    Risposta del medico: "E vorrei ben vedere! Se fossi stato bene non saresti qui." (forse sarebbe stato un po' più colorito e qualcuno gli avrebbe fatto 25 minuti di applausi...)

    Quindi, è necessario sempre indicare cosa non va: la compilazione? l'esecuzione?

    E' necessario sempre, se la compilazione non va bene, indicare perchè non va bene: il compilatore dà dei messaggi? Quali? In quale punto del codice?

    E' necessario sempre, se l'esecuzione non va bene, indicare perchè non va bene: ci sono degli errori? Quali? Ottieni risultati non desiderati? Quali?

    Ad ogni modo, a me funziona alla perfezione:
    codice:
    #include <unistd.h>
    
    int main(int argc, char **argv) {
       execl("/bin/ls", "/bin/ls", (char *) 0, 0);
       return 0;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    il mio codice e' :
    #include <unistd.h>

    int main()

    {
    execl("/bin/ls","/bin/ls",NULL,0);
    return 0;
    }
    in compilazione mi da in riferimento alla riga della exec :

    execprova.c: In function main :
    execprova.c:10: error: too few arguments to function execl

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Prova a sostituire quel NULL, come ti avevo già indicato prima, con un puntatore a char *:

    codice:
    #include <unistd.h>
    
    int main()
    {
       execl("/bin/ls", "/bin/ls",(char *) 0, 0);
       return 0;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    lo zero finale che senso ha?

  10. #10
    Segnala alla funzione che gli argomenti sono finiti. Senza come farebbe a saperlo?
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.