• Non ci sono risultati.

Esame di Sistemi Operativi del 7 Novembre 1996 Esercizio N. 1

N/A
N/A
Protected

Academic year: 2021

Condividi "Esame di Sistemi Operativi del 7 Novembre 1996 Esercizio N. 1"

Copied!
3
0
0

Testo completo

(1)

Esame di Sistemi Operativi del 7 Novembre 1996 Esercizio N. 1

Si progetti utilizzando il linguaggio C e le primitive di basso livello che operano sui file un filtro filtro, che prevede due argomenti di invocazione che devono essere considerati numeri interi positivi (N1 e N2). Il filtro deve, facendo uso delle funzioni primitive di accesso ai file, riportare sullo standard output una selezione dei caratteri dello standard input: in uscita devono essere riportati solo i caratteri il cui codice ascii è compreso tra N1 ed N2.

Inoltre, utilizzando il Bourne Shell di Unix, si progetti un algoritmo che preveda due parametri: il primo parametro deve essere il nome di un direttorio assoluto; il secondo parametro deve essere considerato un numero intero positivo (N1). Il programma deve dapprima richiedere all’utente un numero intero positivo (N2) che deve essere maggiore di N1. Quindi deve verificare nella gerarchia identificata dal primo parametro (dal livello di partenza in poi) se i file leggibili hanno una dimensione minore di N1, maggiore di N2, oppure compresa tra N1 ed N2. Per ogni file leggibile che verifica la condizione di avere la dimensione compresa tra N1 ed N2, si deve applicare il filtro filtro usando il file come standard input e passandogli come parametri i due numeri N1 ed N2.

Soluzione

FILTRO

#include <stdio.h>

#include <stdlib.h>

main (int argc, char **argv) {

int N1, N2;

int nread;

char buf;

N1=atoi(argv[1]);

N2=atoi(argv[2]);

while((nread=read(0,&buf,1))>0)

if(((int)buf>=N1) && ((int)buf<=N2)) write(1, &buf, 1);

}

(2)

SHELL

#71196 dirass N1

case $# in

0|1) echo errore argomenti; exit 1;;

2) if test -d $1 -a -x $1 then cd $1

else echo errore direttorio assoluto exit

fi

;;

PATH=$PATH:direttoriodovestailfle export PATH

echo immetti numero intero positivo read N2

while test $N2 -le $2 do

echo errore sul numero reinserisci read N2

done

esplora $N1 $N2

(3)

#esplora for i in * do

if test -d $i -a -x $i then

cd $i esplora $*

cd ..

fi

if test -f $i -a -r $i then

dim=’wc -c $i’

if test $dim -lt $1 then

echo dimensione minore di N1 fi

if test $dim -gt $2 then

echo dimensione maggiore di N2 fi

if test $dim -ge $1 -a $dim -le $2 then

echo dimensione compresa tra N1 e N2 filtro $1 $2 < $i

fi fi

done

Riferimenti

Documenti correlati

Se l'ampiezza indicata (100 blocchi nell'esempio) viene superata devono venir cancellati i file piu' vecchi fino a che l'ampiezza non sia minore o uguale dell'ampiezza desiderata.

[r]

Tutti gli altri processi devono stampare il proprio identificatore, i valori ricevuti dai figli e la somma così ottenuta.. Risolvere il problema

• Regola 3: Anche se le stringhe di formato della scanf() assomigliano molto a quelle della printf(), hanno una semantica leggermente differente (leggete il manuale!). • Regola

This example assumes that TESTFILE is a file with a few lines of data written to it using the Write # statement; that is, each line contains a string in quotations and a

Questo comando imposta un breakpoint alla riga 6 del file file1.c che si attiva se solo se il valore della variabile i è maggiore di ARRAYSIZE (il che è problematico se, in questa

o implementare una funzione virtuale nella classe base implementata nelle classi derivate (con output). o implementare una funzione virtuale nella classe base non implementata

D. Le pagine di memoria referenziate dalla TLB... 11) Quale vantaggio comporta l’allocazione contigua dei file in un file system?. A. Aumenta la capacità totale