• Non ci sono risultati.

Lab. di Sistemi Operativi Esercitazioni proposte per la lezione del 1 aprile 2011

N/A
N/A
Protected

Academic year: 2021

Condividi "Lab. di Sistemi Operativi Esercitazioni proposte per la lezione del 1 aprile 2011"

Copied!
5
0
0

Testo completo

(1)

Lab. di Sistemi Operativi

Esercitazioni proposte per la lezione del 1 aprile 2011

Utilizzando la shell di Linux e disponendosi in gruppi di due persone per ogni PC del laboratorio.

1. (40 minuti) es51p.sh Controllo parametri della parte shell del compito del 17 luglio 2007: La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) allinterno del file system, mentre il secondo parametro e il terzo parametro devono essere considerati singoli caratteri numerici Cx e Cy. Il programma deve cercare nella gerarchia G specificata (compresa la radice) tutti i direttori che contengono almeno un file che contiene sia nel nome che nel contenuto entrambi i caratteri Cx e Cy. Si riporti il nome assoluto di tali direttori sullo standard output. In ogni direttorio trovato, si deve invocare la parte in C, passando come parametri i nomi dei file trovati (F0... FN-1) e i caratteri numerici Cx e Cy.

2. (40 minuti) es51r.sh Ricerca ricorsiva della parte shell del compito del 17 luglio 2007

3. (40 minuti) es52p.sh Controllo parametri della parte shell del compito del 3 aprile 2009: La parte in Shell deve prevedere due parametri: il primo parametro deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) allinterno del file system, mentre il secondo parametro deve essere considerato un numero intero strettamente positivo (K). Il programma deve cercare nella gerarchia G specificata tutti i direttori (compresa la radice) che contengono un numero di file (solo file e non direttori) compreso fra 1 e K (estremi inclusi): si riporti il nome assoluto dellultimo file trovato (Fi) sullo standard output. Al termine dellintera esplorazione ricorsiva di G, si deve invocare la parte C passando come parametri tutti i nomi assoluti dei file Fi trovati.

4. (40 minuti) es52r.sh Ricerca ricorsiva della parte shell del compito del 3 aprile 2009

(2)

Soluzione

Esercitazioni proposte per la lezione del 1 aprile 2011

Utilizzando la shell di Linux e disponendosi in gruppi di due persone per ogni PC del laboratorio.

1. (40 minuti) es51p.sh Controllo parametri della parte shell del compito del 17 luglio 2007: La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) allinterno del file system, mentre il secondo parametro e il terzo parametro devono essere considerati singoli caratteri numerici Cx e Cy. Il programma deve cercare nella gerarchia G specificata (compresa la radice) tutti i direttori che contengono almeno un file che contiene sia nel nome che nel contenuto entrambi i caratteri Cx e Cy. Si riporti il nome assoluto di tali direttori sullo standard output. In ogni direttorio trovato, si deve invocare la parte in C, passando come parametri i nomi dei file trovati (F0... FN-1) e i caratteri numerici Cx e Cy.

Soluzione:

#! / b i n / s h

# S o l u z i o n e p r o v a d e l 17 l u g l i o 2007 − p r i n c i p a l e

# D a t i : $1−>G $2−>Cx $3−>Cy

# C o n t r o l l o a r g o m e n t i =3=

case $# i n 3 ) ; ;

∗ ) echo Uso : $0 G Cx Cy ; e x i t 1 ; ; esac

# Assegnamento nomi G=” $1 ”

Cx=” $2 ” Cy=” $3 ”

# C o n t r o l l o G a s s o l u t o case ”$G” i n

/ ∗ ) ; ;

∗ ) echo G non a s s o l u t o : ”$G” ; e x i t 1 ; ; esac

# C o n t r o l l o G d i r e c t o r y e s i s t e n t e , l e g g i b i l e ed e s p l o r a b i l e i f [ ! −d ”$G” −o ! −x ”$G” ]

then

echo G non d i r e c t o r y e s p l o r a b i l e e x i t 1

f i

# C o n t r o l l o Cx s i n g o l o c a r a t t e r e numerico case ”$Cx” i n

[ 0 − 9 ] ) ; ;

∗ ) echo Cx non s i n g o l o c a r . num . ”$Cx” ; e x i t 1 ; ; esac

# C o n t r o l l o Cy s i n g o l o c a r a t t e r e numerico case ”$Cy” i n

[ 0 − 9 ] ) ; ;

∗ ) echo Cy non s i n g o l o c a r . num . ”$Cy” ; e x i t 1 ; ; esac

# P r e d i s p o s i z i o n e e s e c u z i o n e export PATH=‘pwd ‘ : $PATH

# I n i z i o r i c e r c a e s 5 1 r . sh $G $Cx $Cy

(3)

2. (40 minuti) es51r.sh Ricerca ricorsiva della parte shell del compito del 17 luglio 2007 Soluzione:

#! / b i n / s h

# S o l u z i o n e p r o v a d e l 17 l u g l i o 2007 − r i c e r c a

# D a t i : $1−>d i r e c t o r y da e s p l o r a r e $2−>Cx , $3−>Cy cd $1

# R i c e r c a d i r e c t o r y c h e s o d d i s f a n o l a r i c h i e s t a s o d d i s f a =0

l i s t a =” ”

f o r f i l e n a m e i n ∗ do

i f [ −f $ f i l e n a m e ] then

case $ f i l e n a m e i n

∗$Cx∗$Cy ∗ ) nomeok = 1 ; ;

∗$Cy∗$Cx ∗ ) nomeok = 1 ; ;

∗ ) nomeok = 0 ; ; esac

g r e p −q $Cx $ f i l e n a m e t r o v a t o C x=$ ?

g r e p −q $Cy $ f i l e n a m e t r o v a t o C y=$ ?

i f [ $nomeok −eq 1 −a $ t r o v a t o C x −eq 0 −a $ t r o v a t o C y −eq 0 ] then

s o d d i s f a =1

l i s t a =” $ l i s t a $ f i l e n a m e ” f i

f i done

# C o n t r o l l o su c o n t a f i l e i f [ $ s o d d i s f a −eq 1 ] then

echo Trovata d i r e c t o r y ‘pwd‘ con $ c o n t a f i l e f i l e parteC $ l i s t a

f i

# I n v o c a z i o n e r i c o r s i v a ( a t t e n z i o n e a g l i a r g o m e n t i ) f o r f i l e n a m e i n ∗

do

i f [ −d $ f i l e n a m e −a −x $ f i l e n a m e ] then

$0 $ f i l e n a m e $2 $3 f i

done

3. (40 minuti) es52p.sh Controllo parametri della parte shell del compito del 3 aprile 2009: La parte in Shell deve prevedere due parametri: il primo parametro deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) allinterno del file system, mentre il secondo parametro deve essere considerato un numero intero strettamente positivo (K). Il programma deve cercare nella gerarchia G specificata tutti i direttori (compresa la radice) che contengono un numero di file (solo file e non direttori) compreso fra 1 e K (estremi inclusi): si riporti il nome assoluto dellultimo file trovato (Fi) sullo standard output. Al termine dellintera esplorazione ricorsiva di G, si deve invocare la parte C passando come parametri tutti i nomi assoluti dei file Fi trovati.

Soluzione:

(4)

#! / b i n / s h

# S o l u z i o n e p r o v a d e l 3 a p r i l e 2009 − p r i n c i p a l e

# D a t i : $1−>G $2−>K

# C o n t r o l l o a r g o m e n t i ==2 case $# i n

2 ) ; ;

∗ ) echo Uso : $0 G K; e x i t 1 ; ; esac

# Assegnamento nomi G=” $1 ”

K=” $2 ”

# C o n t r o l l o G a s s o l u t o case ”$G” i n

/ ∗ ) ; ;

∗ ) echo G non a s s o l u t o : ”$G” ; e x i t 1 ; ; esac

# C o n t r o l l o G d i r e c t o r y e s i s t e n t e , l e g g i b i l e ed e s p l o r a b i l e i f [ ! −d ”$G” −o ! −x ”$G” ]

then

echo G non d i r e c t o r y e s p l o r a b i l e e x i t 1

f i

# C o n t r o l l o K numerico

expr ”$K” + 0 > / dev / n u l l 2>&1 case $ ? i n

0 ) ; ; # r i s u l t a t o != 0 1 ) ; ; # r i s u l t a t o == 0

2 ) echo K non num e ric o : ”$K” ; e x i t 1 ; ; # s y n t a x e r r o r , e s . K=’+’

3 ) echo K non num e ric o : ”$K” ; e x i t 1 ; ; # non−numeric argument , e s . K=’a ’ esac

# C o n t r o l l o K s t r e t t a m e n t e p o s i t i v o i f [ $K − l e 0 ]

then

echo K non s t r e t t a m e n t e p o s i t i v o : ”$K”

e x i t 1 f i

# C o n t r o l l o K p a r i

i f [ ‘ expr $K % 2 ‘ −ne 0 ] then

echo K non p a r i : ”$K”

e x i t 1 f i

# P r e d i s p o s i z i o n e e s e c u z i o n e export PATH=‘pwd ‘ : $PATH

# F i l e temporaneo p e r l a l i s t a d e i f i l e t r o v a t i f i l e t e m p =/tmp/ temp$$

> $ f i l e t e m p

# I n i z i o r i c e r c a

e s 5 2 r . sh $G $K $ f i l e t e m p

# I n v o c a z i o n e p a r t e C a l t e r m i n e d e l l ’ e s p l o r a z i o n e parteC ‘ cat $ f i l e t e m p ‘

rm $ f i l e t e m p

4. (40 minuti) es52r.sh Ricerca ricorsiva della parte shell del compito del 3 aprile 2009

(5)

Soluzione:

#! / b i n / s h

# S o l u z i o n e p r o v a d e l 3 a p r i l e 2009 − r i c e r c a

# D a t i : $1−>d i r e c t o r y da e s p l o r a r e $2−>K, $3−> f i l e temporaneo cd $1

# R i c e r c a d i r e c t o r y c h e s o d d i s f a n o l a r i c h i e s t a c o n t a f i l e =0

l i s t a =” ”

f o r f i l e n a m e i n ∗ do

i f [ −f $ f i l e n a m e −a −r $ f i l e n a m e ] then

c o n t a f i l e =‘expr $ c o n t a f i l e + 1 ‘ l i s t a =” $ l i s t a $ f i l e n a m e ”

f i done

# C o n t r o l l o su c o n t a f i l e

i f [ $ c o n t a f i l e −ge 1 −a $ c o n t a f i l e − l e $2 ] then

echo Trovata d i r e c t o r y ‘pwd‘ con $ c o n t a f i l e f i l e echo $ l i s t a >> $3

f i

# I n v o c a z i o n e r i c o r s i v a f o r f i l e n a m e i n ∗

do

i f [ −d $ f i l e n a m e −a −x $ f i l e n a m e ] then

$0 $ f i l e n a m e $2 $3 f i

done

Riferimenti

Documenti correlati

(15 minuti) es88.c Recupero degli exit value dei processi figli: modificare es88.c in modo che il processo padre attenda la terminazione di tutti i processi figli riportando su

Far creare al padre N processi (con N valore del primo argomento) ed utilizzare una singola pipe per passare una struttura di dati da ogni figlio al

Ognuno di tali processi figli deve creare un file il cui nome (FiK) risulti dalla concatenazione del nome del file associato (Fi) con la stringa che corrisponde al numero K;

Determinare con un programma c (es111.c) il segnale che causa la terminazione di un processo figlio quando questo tenta di scrivere su una pipe con lato di lettura chiuso

(10 minuti) es55p.sh Controllo parametri della parte shell del compito del 6 febbraio 2009 : La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di

Il processo Pi deve cominciare a leggere cercando la prima occorrenza del carattere C; appena trovata deve comunicare all’altro processo della coppia P2*N-1-i la posizione

La parte in Shell deve prevedere due parametri: il primo deve essere il nome assoluto di un direttorio che identifica una gerarchia (G) all’interno del file system e il secondo

La parte in Shell deve prevedere un numero variabile di parametri Q+1 (con Q maggiore o uguale a 2): il primo parametro deve essere il nome assoluti di