|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 81
|
[C] Passare piu parametri a execlp()
Ciao a tutti, sto facendo un programma in unix che lanci piu
comandi bash ognuno dei quali con piu di un parametro. Non so come passare gli argomenti a execlp. Ho un array di stringhe chiamato "parametri" che contiene i vari parametri che voglio passare al mio comando. char *comando; char *parametri[10]; Come passo l'array di parametri a execlp dal momento che non posso passargli direttamente l'array "parametri", ma devo invece passargli piu' stringhe? Pensavo di dover usare stdarg, ma non e' quello il punto, perche' pur avendo un array di parametri gia definito non ho idea di come passarlo a execlp.. Ovviamente non voglio fare cosi: execlp("ls","ls","-l","-1",(char *) NULL); perche' i parametri li passo da riga di comando come un unica stringa che poi scompongo in token e inserisco in parametri[] grazie in anticipo, Blob Ultima modifica di vv1984 : 24-01-2008 alle 11:58. Motivo: imprecisione |
|
|
|
|
|
#2 |
|
Messaggi: n/a
|
devi usare execlp per forza?
non puoi usare execvp? |
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 81
|
Si, e' un esercizio di un esame..
Sono purtroppo costretto ad usare execlp. Infatti con execvp andavo assai piu tranquillo. Penso ci sia il modo anche con execlp dal momento che e' indicato nella consegna.. grazie |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' un serio problema...ma molto serio. Non riesco sinceramente a farmi venire in mente come potresti dimensionare il numero di parametri a run time.
Hai un limite al numero dei parametri ? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Se il numero di parametri è fisso, non hai altra strada che:
Codice:
execlp(comando, comnando, parametri[0], parametri[1], parametri[2], ...ecc. fino a parametri[9], NULL); E' un esercizio del cavolo se posso permettermi; execlp è un wrapper per execve, che è una funziona che ti potrebbe andar bene. In sostanza, stai usando un wrapper per execve per cercare di emulare...la execve stessa! Un obrobrioso metodo alternativo è concatenare il comando e i suoi parametri in una unica stringona, e usare execlp così: execlp("/bin/bash", "/bin/bash", "-c", obrobrio, NULL);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Jan 2006
Messaggi: 81
|
Quote:
Pero' mi interessava (a parte risolvere l'esercizio seguendo la consegna, perche' son pignoli.. ) sapere in che modo passare un numero variabile di parametri alla funzione execlp.. Non c'e proprio modo? Non avevo forse specificato che devo passare un numero variabile di parametri sotto forma di stringa del tipo "-l -1 -a" grazie e scusate la rottura di scatole.. Ultima modifica di vv1984 : 24-01-2008 alle 15:32. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
In c non mi risulta, non che io sappia.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
l'unica cosa che mi viene in mente (ma son fuso e me ne sto andando quindi la butto li, magari da idea nasce idea) è una funzione
Codice:
call_execlp( int count, ... ) spero di aver capito il tuo problema e di non aver detto 'na minchiata
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:41.




















