Esame del 04.09.07 sop

Transcript

Esame del 04.09.07 sop
SISTEMI OPERATIVI
CENTRO MULTIMEDIALE MONTIFERRU
Esame del 04.09.2007
Soluzione esercizi
1. Si realizzi uno script di shell bash che consenta di concatenare tre file testuali i cui
nomi sono letti da tastiera (ma non da linea di comando). Durante l’esecuzione dello
script, eventuali interruzioni da tastiera devono essere mascherate e ignorate.
#!/bin/bash
trap ‘ ‘ INT
# oppure trap ‘ ‘ 2
# le doppie virgolette permettono di ignorare il CTRL-C da tastiera
echo “inserisci nome del primo file”
read file1
echo “inserisci nome secondo file”
read file2
echo “inserisci nome terzo file”
read file3
cat file1 file2 file3
#il comando CAT file1 file2 file3 concatena il contenuto dei tre file e visualizza a video
il risultato della concatenazione
2. Si realizzi un programma C per ambiente UNIX che permetta di generare la seguente
gerarchia di processi (si elenchino unicamente le chiamate di sistema per la creazione
dei processi)
A
B
D
C
E
#include <stdio.h>
main() /*sono A*/
{ int PIDB,PIDC,PIDD,PIDE;
PIDC=fork(); /*creazione processo C*/
if (PIDC==0)
{ /*codice di C*/
printf(“sono C figlio di A!(PID:%d)\n”, getpid())
/*getpid è una system call che restituisce il pid del processo che
la chiama*/
}
else if (PIDC>0)
{ /*codice del padre!sono A*/
PIDB=fork(); /*creazione di B*/
Luca Orrù
SISTEMI OPERATIVI
CENTRO MULTIMEDIALE MONTIFERRU
if (PIDB==0)
{
/*sono nel codice di B*/
printf(“sono B altro figlio di A!(PID:%d)\n”, getpid());
PIDD=fork(); /*creazione D*/
if (PIDD==0)
{
/*sono nel codice di D*/ }
else if (PIDD>0)
{ /*sono ancora B*/
PIDE=fork(); /creazione del processo E*/
}
}
}
}
} /*end main*/
3. Dato il file nomi.txt strutturato nel modo seguente:
3412 Peter
123
3834 Jonny
333
1248 Kate
634
1423 Tony
567
2567 Peter
435
3567 Alice
535
1548 Kerry
534
….
Scrivere le espressioni regolari con AWK che permettano di:
a) Stampare le righe che abbiano un codice finale strettamente maggiore di 500
b) Stampare solo il codice iniziale e quello finale delle persone che si chiamano Peter
c) Stampare solo il codice iniziale per le persone che si chiamano Peter e hanno un
codice finale minore o uguale a 300
d) Stampare solo nome e codice finale per le persone che hanno codice iniziale che
termina con 8
a) awk ‘ $3>500 {print$0}’ nomi.txt
#$3 identifica il terzo campo nel file ovvero il codice finale
b) awk ‘$2==”Peter” {print$1,$3}’ nomi.txt
oppure awk ‘/Peter/ {print$1,$3}’ nomi.txt
c) awk ‘$2==”Peter” && $3<=300 {print$1}’ nomi.txt
#&& è l’operatore and logico
d) awk ‘/^[0-9][0-9][0-9]8/ {print$2,$3}’ nomi.txt
#^ identifica l’inizio riga
Luca Orrù