|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
[Schell]
Una shell puo essere una cosa tipo questo???
Codice:
*( schell ) ( char[]* ); int main( int argc, char *argv[] ) { if ( argv[0] == cp ) { schell = cp; schell(argv[1], argv[2]); }else if( argv[0] == mv) { schell = mv; schell(argv[1], argv[2]); }else if( argv[0] == rm) { schell = rm; schell(argv[1], argv[2]); } } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Guarda che argv[0] è il nome del file eseguibile che contiene il main...
Comunque non capsico cosa tu intenda... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
nemmeno io ho capito
ma perche' la chiami schell? c'e' una c di troppo |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: [Schell]
Quote:
Cosa vuoi fare? Un emulatore di bash ad esempio?
__________________
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 |
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
si, un emulatore di bash
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Allora dovresti rivedere il problema. Devi fare un interprete di comandi, ovvero un programma che fa queste cose:
- leggere l'input da tastiera - divide l'input in nome "comando parametro1 parametro2 ..." - se il comando è un comando conosciuto dall'interprete, allora chiama la funzione che lo implementa; altrimenti assume che il comando è un eseguibile, e lo lancia (vedi fork+execve ecc.) -- ad es. "cd" viene eseguito da bash (non è un programma esterno), mentre "more" è un programma esterno.
__________________
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 |
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Io ho scritto una shell per un progetto all'università... Non è facile. Ti devi implementare tutto il meccanismo di job control e di history. Inoltre devi avere un buon meccanismo di signal handling. Una shell non deve mai crashare, se il programma che ha avviato crasha, ma deve gestire la situazione.
Mi ha dato grosse soddisfazioni questo progetto. Alla fine ho avviato KDE dalla mia shell e il comando top mostrava esattamente la gerarchia dei processi a partire dal ppid (parent pid) della mia shell ![]() ![]() |
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
A proposito kleidemos, per riagganciarmi al discorso che facevamo sull'importanza delle strutture di dati ... Per il job controlling ho usato una lista di liste, dove il nodo della prima lista era il job, che conteneva un link ad un'altra lista che erano i processi. (Come vedi devi anche creare un meccanismo per formalizzare il concetto di job
![]() ![]() Per l'history ho usato una lista circolare doppiamente concatenata ![]() Come vedi le strutture dati sono il cuore di ogni programma ben disegnato. |
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
![]() Lo hai ancora il cod? |
|
![]() |
![]() |
![]() |
#10 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Ma se vuoi ti posto il job controller (in fondo è quello il cuore di una shell) ![]() |
|
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Se riesco ti posto pure alcune figure che misi nella relazione finale ... Ovvero le strutture dati usate e lo shot con il ppid in azione
![]() |
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Anzi, non ti posto niente perchè nell'altro thread mi hai dato dello stronzo
![]() ![]() |
![]() |
![]() |
![]() |
#14 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
io? |
|
![]() |
![]() |
![]() |
#15 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#16 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#17 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
![]() Se ti può consolare ho appena finito di studiare ... ![]() ![]() |
|
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
cazzo
![]() |
![]() |
![]() |
![]() |
#19 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
![]() ![]() ![]() ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#20 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
notte
![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:36.