1 Programmi singoli e gruppi
Più in generale possiamo avere gruppi di processi che collaborano ai fini di un risultato; si parla di job Un solo job per volta può avere il controllo del terminale
Esempio di riferimento prompt> ls –lt | grep baroglio
pipe
Comando ls
Elenca (lista) i file contenuti in una directory
Può avere molte opzioni, fra queste l fa sì che vengano restituiti non solo i nomi dei file ma anche tutte le informazioni associate (diritti di accesso, owner, dimensione, data di ultima modifica …)
L’opzione t fa sì che i file vengano elencati in ordine temporale, dando priorità ai file modificati più di recente
esempio
documentiFile1 File2 sottodocumenti
prompt> ls
File1 File2 sottodocumenti prompt> ls -lt
- r w - r - - r - - 10:21 user1 group1 10 File2 dr w x r - x r - x 9:45 user1 group1 512 Sottodocumenti - r w - r - - r - - 3jan user2 group1 324 File1
2 Ridirezione flussi
Il comando ls stampa il risultato della sua esecuzione sul terminale, esiste un modo per salvare in un file tale risultato (per un’elaborazione successiva)? SI
COMANDO stdin
stdout
stderr (tastiera)
(terminale)
(terminale) I valori di default possono essere cambiati
esempio
prompt> ls -lt > memoOutput prompt>
Anziché su terminale l’output del programma viene scritto nel file indicato dopo il simbolo > (maggiore)
Esempio
ridirezione standard input
Supponiamo di avere un file “rubrica” che contiene nomi e numeri di telefono corrispondenti e supponiamo di voler cercare i numeri di telefono delle persone che si chiamano
“Luca”
Posso usare il comando grep che restituisce come risultato tutte le linee lette sullo standard input, che contengono la parola specificata come suo argomento
Per usarlo devo far sì che il comando legga l’input dal file rubrica anziché da tastiera, quindi devo ridirigere lo standard input
prompt> grep Luca < rubrica Luca Rossi 9876543 Luca Bianchi 1234456 prompt>
3 Torniamo all’esempio …
prompt> ls –lt | grep baroglio
Elenca i file nella dir. corrente
completi di ogni info Estrae le linee che contengono la parola baroglio
Simbolo pipe: a cosa serve??
Pipe, simbolo |
Pipe è uno strumento molto importante, che consente di
“agganciare” comandi o programmi facendo sì che l’output prodotto dal primo venga passato come input al
secondo
Nell’esempio l’elenco dei file della directory corrente, completo di tutte le informazioni associate ai medesimi, viene passato come input a grep, che estrae e visualizza solo le linee relative ai file di interesse
Ancora ridirezione
ridirezione stderr
Non tutte le versioni di Unix consentono la ridirezione dello standard error, di solito vale il seguente trucchetto:
prompt> (comando > memoOutput) >& memoError Il simbolo >& da solo di solito non separa quel che viene inviato allo stdout da quello che viene inviato allo stderr
Nota: comando > /dev/null
Si usa quando un programma produce molto output testuale che si vuole ignorare
4 Linguaggio C e ridirezione
#include <stdio.h>
main() {
int digit=0;
scanf("%d", &digit);
printf("\n STDOUT -- digit = %d \n", digit);
fprintf(stderr, "\n STDERR -- digit = %d \n", digit);
}
Esempi di esecuzione
prompt> mioProgramma 20
STDOUT -- digit = 20 STDERR -- digit = 20
prompt> mioProgramma > risultato 25
STDERR -- digit = 25
prompt> mioProgramma &> mioProgrOut 40