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ù