Soluzioni compito del 26/06/2012
Esercizio 1
foo: calcola la cifra massima della stringa $1, la pone in $a, pone in $b il resto della stringa stessa.
bar: usa foo
per ordinare le cifre di $1.
Il risultato puo' essere calcolato eseguendo lo script:
#!/bin/bash function foo (){ local i=0 local j=-1 while (( $i<${#1} )) ; do \ if test ${1:$i:1} -gt $j ; \ then j=${1:$i:1} ; \ fi ; \ i=$i+1 ; \ done i=0 while (( $i<${#1} )) ; do \ if test ${1:$i:1} -eq $j ; \ then b=${1:0:$i}${1:$i+1} ; \ break ; \ fi ; \ i=$i+1 ; \ done a=$j } a=0 d="" b=0 function bar(){ local i=0 local c=$1 while (( ${#c} )) ; do \ foo $c ; \ c=$b ; \ d=$d$a ; \ done } bar $1 echo $d
Esercizio 2
Input di rpcgen:
struct input_data { string text<1024>; string delim<16>; } struct output_data { int nwords; float avg_len; } typedef struct input_data input_data; typedef struct output_data output_data; typedef string help_data[SIZE_OF_HELP]; program WCPROG { version WCVERSION1 { output_data wcount(input_data) = 1; helpdata help(void) = 2; } = 1; } = 44444;
L'implementazione consiste nell'impiegare strtok
per estrarre le parole una alla volta, e calcolarne la lunghezza:
char *curr=strtok(text,delim); int wc=0; int tot_len=0; while(curr) { wc++; tot_len+=strlen(curr); curr=strtok(NULL,delim); }
Il valore di ritorno va inserito in una struttura analoga a quella dichiarata in XDR.
Esercizio 3
- wlan0 e' DOWN;
ip link set wlan0 up
(oppureifconfig wlan0 up
). - e' disponibile una shell bash con la possibilita' di setuid;
chmod a-s
, da root. - uccide il processo (l'handler impostato non ha effetto).