Terminale gestione dei dati in ingresso e uscita, reindirizzamenti e pipe

Autore:[Antonio Gallonetto]

Canali di comunicazione standard.

In tutti i sistemi operativi, abbiamo tre canali di comunicazione standard:

Standard Input abbiamo un flusso di dati in entrata. Qui parliamo di software che sono eseguiti all’interno del terminale, quindi i dati proverranno dal terminale o dall’interazione con l’utente.

Standard output è il flusso di dati in uscita, e normalmente è il terminale.

Standard Error è il canale per comunicare gli errori ed eventuali messaggi di diagnostica.

Introducendo il concetto di flusso dati possiamo facilmente capire come reindirizzare facilmente il flusso sia in entrata che in uscita. Possiamo ad esempio dire ad un’applicazione di prendere i dati da un file, oppure inviare l’uscita ad un archivio.
Se non avessimo questo concetto, dovremmo indicare in modo specifico dove prendere i dati, ad esempio leggi il settore x del disco, in questo caso non potremmo prendere i dati da un altra fonte.

Nel nostro caso abbiamo dei canali di comunicazione standard, e il software alla partenza li crea secondo le nostre indicazioni, è quindi sempre possibile far puntare questi canali da un’altra parte.

Tutti questi concetti sono stati introdotti con unix, nel quale l’idea fondamentale è di trattare i canali di comunicazione come fossero dei files. Quindi ogni canale di comunicazione ha un suo descrittore, che poi all’interno del sistema operativo andrà ad identificare il canale vero e proprio.
I nostri descrittori standard sono:

Il sistema per reindirizzare input, output ed errori è estremamente semplice:

Un reindirizzamento che si usa spesso con i sistemi operativi unix-like è il reindirizzamento verso un device speciale /dev/null. Questo reindirizzamento è verso il nulla. Potrei ad esempio reindirizzare gli errori verso il niente perché il software non interagisce con l’utente, in questo caso farei il reindirizzamento con 2>/dev/null

Pipe

Le pipe prendono un flusso di dati in uscita da un programma e diventa quello in entrata per un altro software.

La pipe si indica con il simbolo |

Un esempio potrebbe essere prendere un file e contare il numero di parole che abbiamo all’interno e lo salviamo nel file risultato.txt.

cat reindirizzamento.txt | wc -m >risultato.txt

Windows

Nonostante il sistema operativo Windows sia costruito in modo diverso dagli unix, anche Microsoft ha aderito a questa filosofia e possiamo tranquillamente usare gli stessi comandi. Alcuni esempi con clip che prende il contenuto in input e lo porta negli appunti di Windows in questo modo si può incollare in qualsiasi software:

REM copio il contenuto della lista negli appunti
clip < lista.txt 
REM prendo l'uscita di dir quindi la lista dei files  
REM contenuti nella cartella corrente e la mando come input negli appunti
dir | clip