Pages: [1] 2   Go Down
Print
Author Topic: Esercizio (stralcio di compito)  (Read 6382 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« on: 24-05-2012, 18:09:18 »

Salve.
Ho qualche dubbio sul seguente esercizio:

"Supponiamo di eseguire la seguente sequenza di comandi su una shell UNIX all’interno di una cartella vuota:

$ echo "ciao" > testo.txt
$ chmod g-r testo.txt
$ cat testo.txt 2> /dev/null && echo verde || echo rosso

Come output ottengo :

ciao
verde

Non ho ben capito l'ultima riga di comandi.Con la prima effettuo il redirezionamento dell'output sul file testo.txt.La seconda modifica i permessi di accesso del file.
La terza visualizza il contenuto del file e qui mi spiego il primo output "ciao",ma non riesco a capire perchè poi restituisce verde.Con quale ordine vengono eseguiti gli || e gli && ?

Grazie.
Logged
Matto1790
Matricola
*
Offline Offline

Gender: Male
Posts: 61



« Reply #1 on: 24-05-2012, 18:27:37 »

Mi soffermo su ciò che non hai capito : allora dalle slide del professore la seconda condizione di un && viene eseguita solo se la prima risulta "true" ovvero non da errori. Quindi vedendo il testo in questa maniera :
cat testo.txt 2> /dev/null && (echo verde || echo rosso) capisci meglio che la seconda condizione è fatta da : "echo verde || echo rosso"; di questi viene eseguito il secondo solo se il primo da errore o risulta "false" ma non è questo il caso per cui risulta :
ciao
verde

Spero che ti sia più chiaro ora anche se non credo di essermi spiegato al meglio 
Logged
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« Reply #2 on: 25-05-2012, 08:47:09 »

Mi soffermo su ciò che non hai capito : allora dalle slide del professore la seconda condizione di un && viene eseguita solo se la prima risulta "true" ovvero non da errori. Quindi vedendo il testo in questa maniera :
cat testo.txt 2> /dev/null && (echo verde || echo rosso) capisci meglio che la seconda condizione è fatta da : "echo verde || echo rosso"; di questi viene eseguito il secondo solo se il primo da errore o risulta "false" ma non è questo il caso per cui risulta :
ciao
verde

Spero che ti sia più chiaro ora anche se non credo di essermi spiegato al meglio 

Ok con le parentesi è un po più chiaro.
Grazie 

Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 25-05-2012, 09:40:29 »

Le parentesi sono state inserite male.

I comandi vengono eseguiti (o letti) nell'ordine da sinistra a destra.

Se proprio si volesse includere le parentesi per evidenziare l'ordine, si dovrebbe sfruttare l'associatività a sinistra, ovvero:

(cat testo.txt 2> /dev/null && echo verde) || echo rosso

E così, se il file test.txt esiste vedresti "verde" dopo il contenuto del file, ma se non esistesse, vedresti "rosso".

Gli operatori && e || sono cortocircuitati, proprio come in C e in Java.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« Reply #4 on: 25-05-2012, 09:48:01 »

Le parentesi sono state inserite male.

I comandi vengono eseguiti (o letti) nell'ordine da sinistra a destra.

Se proprio si volesse includere le parentesi per evidenziare l'ordine, si dovrebbe sfruttare l'associatività a sinistra, ovvero:

(cat testo.txt 2> /dev/null && echo verde) || echo rosso

E così, se il file test.txt esiste vedresti "verde" dopo il contenuto del file, ma se non esistesse, vedresti "rosso".

Gli operatori && e || sono cortocircuitati, proprio come in C e in Java.

A perfetto.Quindi se il file non esistesse ,in output avrei solo "rosso"?
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 25-05-2012, 09:53:51 »

Esattamente.

Comunque, materie di questo tipo si studiano male se non le si pratica.
La cosa migliore che puoi fare è di provare tu stesso i comandi, per capire come funzionano le cose .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« Reply #6 on: 25-05-2012, 09:56:32 »

Esattamente.

Comunque, materie di questo tipo si studiano male se non le si pratica.
La cosa migliore che puoi fare è di provare tu stesso i comandi, per capire come funzionano le cose .

Si si hai perfettamente ragione ho appena provato ,era solo per capire se avevo compreso il tuo ragionamento.
Grazie 1000 
Logged
Matto1790
Matricola
*
Offline Offline

Gender: Male
Posts: 61



« Reply #7 on: 25-05-2012, 14:01:23 »

Le parentesi sono state inserite male.

Si hai ragione sorry 
Logged
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« Reply #8 on: 25-05-2012, 16:58:18 »

Approfitto della vostra disponibilità per cercare di chiarire dei dubbi sul seguente esercizio

Supponiamo di avere 3 processi che condividono una variabile x e che i loro pseudo-codici siano i seguenti:

P1: wait(S)
      x=x-2
      signal(T)
      wait(S)
      x=x-1
      signal(T)

P2: wait(R)
      x=x+2   
      signal(T)
      wait(R)

P3: wait(T)
      if (x<0)
      signal(R)
      wait(T)
      print(x)

Determinare l’output del processo P3 assumendo che il valore iniziale di x  è 1 e che i 3 semafori abbiano i seguenti valori iniziali: S=1, R=0, T=0.

Non sapendo cosa facciano wait e signal non sto capendo bene come muovermi 
Logged
Mario Di Raimondo
Moderator
Apprendista Forumista
*****
Offline Offline

Posts: 223


WWW
« Reply #9 on: 25-05-2012, 21:19:58 »

Non sapendo cosa facciano wait e signal non sto capendo bene come muovermi  

Una leggenda metropolitana afferma che studiare la teoria aiuti nel risolvere i relativi esercizi...
Logged
Matto1790
Matricola
*
Offline Offline

Gender: Male
Posts: 61



« Reply #10 on: 25-05-2012, 23:55:46 »

Non sapendo cosa facciano wait e signal non sto capendo bene come muovermi  

Una leggenda metropolitana afferma che studiare la teoria aiuti nel risolvere i relativi esercizi...

Direttamente dalle slide SO-02 pagina 23 : "operazioni: down e up (detti anche wait e signal);"
Penso che sapendo questo arriverai a capire da solo cosa facciano wait e signal e che valore avrà "x" alla fine  ciao
Logged
Il Capitano
Apprendista Forumista
**
Offline Offline

Posts: 409


« Reply #11 on: 26-05-2012, 08:32:07 »

Non sapendo cosa facciano wait e signal non sto capendo bene come muovermi  

Una leggenda metropolitana afferma che studiare la teoria aiuti nel risolvere i relativi esercizi...

Direttamente dalle slide SO-02 pagina 23 : "operazioni: down e up (detti anche wait e signal);"
Penso che sapendo questo arriverai a capire da solo cosa facciano wait e signal e che valore avrà "x" alla fine  ciao

Sei stato molto gentile.Il fatto è che io studio lezioni+slides+libro e poi riunisco tutto in un quaderno scritto da me, ma erroneamente ho pensato di poter tralasciare i "sinonimi" di down e up.Quindi studiando sempre nel quaderno non me li sono mai ritrovati e mi suonavano nuovi.Grazie ancora
Logged
milos224
Forumista
***
Offline Offline

Posts: 830


« Reply #12 on: 28-05-2012, 09:52:38 »

Non sapendo cosa facciano wait e signal non sto capendo bene come muovermi  

Una leggenda metropolitana afferma che studiare la teoria aiuti nel risolvere i relativi esercizi...

Direttamente dalle slide SO-02 pagina 23 : "operazioni: down e up (detti anche wait e signal);"
Penso che sapendo questo arriverai a capire da solo cosa facciano wait e signal e che valore avrà "x" alla fine  ciao
Alla fine l'output qual'è? 0?
Logged
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #13 on: 28-05-2012, 10:06:36 »

http://forum.sdai.unict.it/index.php?topic=12907.0

qua viene fatta una discussione sullo stesso esercizio e si spiega come funziona...
Logged

"Che la Forza sia con Te"
milos224
Forumista
***
Offline Offline

Posts: 830


« Reply #14 on: 28-05-2012, 10:20:02 »

http://forum.sdai.unict.it/index.php?topic=12907.0

qua viene fatta una discussione sullo stesso esercizio e si spiega come funziona...
Ok, ho preso la soluzione.

X=1 S=1 R=0 T=0

L'unico processo che può partire è P1, fa una wait su S, ora le variabili valgono
X=1 S=0 R=0 T=0

P1: x=x-2  //Ora x vale -1
signal(T) //Ora T vale 1
wait(S)  //Si blocca aspettando che S torni 1

X=-1 S=0 R=0 T=1
L'unico processo che può partire è P3, fa una wait su T:
X=-1 S=0 R=0 T=0

P3:
 if (x<0) signal(R)  //Verificato R=1
wait(T) //T è zero si blocca aspettando che T torni 1

Ora l'unico processo che può partire è P2, fa una wait su R:
X=-1 S=0 R=0 T=0
P2:
x=x+2 //X=1
signal(T) // T=1
wait(R) //Si blocca

X=1 S=0 R=0 T=1
P3 è l'unico processo ad aspettare su T, quindi può proseguire:
P3:
print(x)

Output 1

Non mi è chiaro l'ultimo passaggio..P3 è l'unico processo che aspetta su T, ma poi c'è la condizione:
 if (x<0) signal(R)  //Non Verificato
wait(T) //T è zero e non si dovrebbe bloccare? Come fa a stampare 1?
Logged
Pages: [1] 2   Go Up
Print
Jump to: