Esame 19 febbraio 2009, testo n.2 Parte di Unix 1) eseguire le seguenti operazioni binario : 11011101 + 11110011 = 111010000 ottale : 3226617 + 7043455 = 12272274 esadecimale : 1FEE30 + B3B2B1 = D3A0E1 2) Fare uno script che, di un numero intero passato come argomento, stampi quel numero intero ottenuto utilizzando solo gli ultimi 4 bits a destra, (cioe' quelli meno significativi). Il testo di questo esercizio non e' stato capito da tutti gli studenti; qualcuno infatti ha cercato di fare uno script che stampasse le ultime (= meno significative) cifre DECIMALI del numero. Invece l'esercizio chiedeva di trovare le ultime 4 cifre BINARIE del numero ed usare quelle per fare un'altro numero che doveva poi essere stampato. Ho comunque per stavolta accettato anche la prima interpretazione. Qui di seguito c'e' la soluzione cosi' come intendevo io l'esercizio. #!/bin/tcsh # 15 decimale corrisponde a 1111 binario. @ mask = 15 @ result = ( $argv[1] & $mask ) echo il numero risultante ottenuto con gli ultimi 4 bits e\' $result Parte di Perl 3) scrivere uno script che, sfruttando il comando ps di unix, con una appropriata opzione, estragga per ciascun processo presente nel sistema in quel momento, sia il PID che Parent Process Number. Quindi si faccia una stampa, per ciascun process, di solo il PID, il PPID, la loro somma ed il loro prodotto. Infine, si scopra qual'e' il proprio username e si metta tale username in una variabile scalare. Poi si sfrutti tale variabile per fare il ps di solamente quei process che appartengono a se stessi. Infine dei process che appartengono a se stesso e che iniziano per k se ne faccia un renice di +10 #!/usr/bin/perl @lista = `ps -el`; shift @lista; foreach (@lista){ @campi = split; $somma=$campi[3]+$campi[4]; $prod = $campi[3]*$campi[4]; print "PID = $campi[3], PPID= $campi[4], somma = $somma, prodotto = $prod\n"; } $username = `whoami`; @info = `ps -u $username`; print @info; foreach (@info){ @fields = split; if ($fields[3] =~ m/^k/){ system "renice +10 $fields[0]"; } }