[Powered by Google Translate] TOMMY: In questo video, che imparerete a conoscere
riorientare e tubi.
Finora abbiamo usato funzioni come printf per
dati di output al terminale e funziona come GetString
per consentire all'utente di fornire un contributo alla nostra
programma utilizzando la tastiera.
Vediamo rapidamente un'occhiata a un programma che ottiene una linea di
input dall'utente e quindi lo emette.
>> In linea 7, stiamo chiedendo all'utente una stringa, e
poi sulla linea 8, stiamo stampando di nuovo fuori.
Facciamo compilare ed eseguire il nostro programma.
Grande.
La stringa abbiamo fornito è stato rimandato indietro
a noi al terminal.
Questo è accaduto perché la funzione printf ha scritto a un
torrente chiamato fuori standard, o s-t-d-out.
Quando qualcosa è scritto su stdout, è di default
visualizzata dal terminale.
>> Ecco, questo è tutto molto bello, ma cosa succede se, invece di
visualizzazione della stringa, abbiamo voluto salvarlo in un file?
Per esempio, si potrebbe desiderare di ricordare esattamente ciò che la nostra
programma fatto quando abbiamo dato un input in un secondo momento.
Un approccio potrebbe essere quello di fare questo nel nostro programma in C, utilizzando
alcune funzioni speciali per la scrittura ai file che faremo
vedere in un altro video.
Ancora più facile, però, potrebbe essere in qualche modo
reindirizzare stdout in un file.
In questo modo, quando si scrive su stdout printf, i contenuti saranno
essere scritti in un file piuttosto che
visualizzata dal terminale.
Siamo in grado di fare proprio questo con l'aggiunta di un segno di maggiore, seguita
da un nome di file, al comando che utilizziamo per eseguire il nostro programma.
>> Quindi, piuttosto che semplicemente di esecuzione. / Redirect, siamo in grado di
eseguire. / reindirizzamento, seguita da un segno di maggiore, seguita da
nome del file, come file.txt.
Vediamo cosa succede.
OK.
Si noti che questa volta, nulla è stato di visualizzazione sul terminale,
ma non hanno modificato i contenuti della nostra
Programma C affatto.
Esaminiamo ora il contenuto di questa directory con ls.
>> Bene.
Ora abbiamo un nuovo file nella directory chiamato file.txt,
che è il nome del file che abbiamo fornito quando abbiamo finito il nostro
Redirect programma.
Apriamo il file.txt.
E qui, possiamo vedere che lo stdout di redirect è stato
scritto nel file denominato file.txt.
Quindi cerchiamo di eseguire il comando precedente di nuovo, ma fornendo un
ingresso diverso questa volta.
Va bene.
Diamo uno sguardo al file.txt ora.
>> Possiamo vedere che il file è stato sovrascritto, quindi il nostro
ingresso originale non c'è più.
Se invece si desidera aggiungere a questo file, mettendo il nuovo
ingresso sotto il contenuto esistente del file, possiamo
utilizzare due segno di maggiore invece di uno solo.
Proviamo a farlo.
Ora, se apriamo file.txt di nuovo, possiamo vedere entrambi i nostri
linee di ingresso.
In alcuni casi, si potrebbe desiderare di scartare qualsiasi
uscita del nostro programma.
Invece di scrivere l'output in un file e quindi l'eliminazione di
il file quando abbiamo finito con essa, siamo in grado di scrivere una speciale
file chiamato / dev / null.
Quando qualcosa viene scritto / dev/null--
o semplicemente devnull in breve -
viene automaticamente scartato.
Quindi, pensare a devnull come un buco nero per i vostri dati.
>> Così ora abbiamo visto come il segno più grande possibile reindirizzare
stdout, vediamo come possiamo reindirizzare standard -
o s-t-d-in -
l'analogo di stdout.
Mentre funzioni come printf scrivere nel flusso di chiamata
stdout, GetString e funzioni simili letto dal flusso
chiamato stdin, che, per impostazione predefinita, è il flusso di
caratteri digitati sulla tastiera.
Siamo in grado di redirigere lo stdin con il segno di minore, seguito
da un nome di file.
Ora, invece di chiedere conferma all'utente per l'input al
terminale, un programma si aprirà il file che abbiamo specificato e utilizzare
le sue linee come input.
>> Vediamo cosa succede.
Grande.
La prima linea di file.txt è stato stampato al terminale
perché stiamo chiamando GetString una volta.
Se abbiamo avuto un altro invito a GetString nel nostro programma, il
successiva riga di file.txt sarebbe stato usato come
ingresso a quella chiamata.
Anche in questo caso, non abbiamo modificato il nostro programma C a tutti.
Stiamo cambiando solo il modo in cui lo si esegue.
E anche ricordare, non abbiamo reindirizzato stdout questa volta,
così l'uscita del programma era ancora
visualizzazione sul terminale.
Si può, naturalmente, reindirizzare sia lo stdin
e stdout come questo.
Ora, file2.txt contiene la prima linea di file.txt.
>> Così, con questi operatori, siamo stati in grado di leggere e
scrittura da file di testo.
Ora, vediamo come possiamo utilizzare l'output di un programma come
l'ingresso ad un altro programma.
Quindi, ecco un altro semplice programma C I
sono qui chiamato hello.c.
Come si può vedere, questo emette semplicemente "Ciao
lì "per l'utente.
Se voglio reindirizzare da utilizzare come ingresso l'uscita di ciao -
un altro programma -
Potrei primo redirect lo stdout di ciao in un file denominato
input.txt, quindi reindirizzare la stdin di reindirizzare questa stessa
file - input.txt.
Così posso fare. / Ciao> input.txt.
Premere Invio per eseguire questo.
Seguito da. / Redirect <
input.txt, ed eseguire quello.
Così siamo in grado di ridurre questo un po 'con un punto e virgola, che permette di
Ci eseguire due o più comandi sulla stessa riga.
Quindi posso dire,. / Ciao> input.txt, punto e virgola,
. / Redirect input.txt <.
>> Così funziona, ma si sente ancora abbastanza poco elegante.
Voglio dire, abbiamo davvero bisogno di questo file di testo che è intermediario
Non è più necessario dopo redirect corse?
Per fortuna, siamo in grado di evitare questo file extra testo utilizzando ciò che è
detta pipe.
Se dico / ciao |.. / Redirect, allora lo stdout di
il programma di sinistra -
in questo caso, ciao -
verrà utilizzato come standard input per l'
programma sulla destra.
In questo caso, reindirizzare. Quindi cerchiamo di eseguire questo.
>> Ecco fatto.
Possiamo vedere che l'uscita di ciao stato utilizzato come ingresso
per il reindirizzamento.
Per infilare i comandi insieme utilizzando tubi, si forma ciò che è
detta pipeline, dal momento che la nostra produzione è principalmente spostando
attraverso una sequenza di comandi.
Usando le pipe, si può fare un po 'di cose interessanti senza bisogno di
scrivere codice a tutti.
Per esempio, diciamo che vogliamo sapere quanti file sono
all'interno di questa directory.
Utilizzando un tubo, possiamo combinare il comando ls con il wc -
o numero di parole -
comando.
Ls produrrà ogni file nella directory in stdout, e
wc ci dirà quante linee sono stati dati via stdin.
Quindi, se diciamo ls | wc-l -
fornire l'opzione-l per wc per dirgli di contare le righe -
siamo in grado di vedere esattamente quanti file sono
nella directory corrente.
>> Quindi diamo un'occhiata a un altro esempio.
Ho qui un file chiamato students.txt,
con una lista di nomi.
Tuttavia, questi nomi non sono in alcun ordine tutto, e sembra
come alcuni nomi si ripetono.
Ciò che vogliamo è una lista di nomi univoci in ordine alfabetico
fine, salvate in un file chiamato final.txt.
Si potrebbe, ovviamente, scrivere un programma in C per fare questo per noi.
Ma sta per arrivare inutilmente
complesso piuttosto velocemente.
Facciamo invece utilizzare tubi e alcuni built-in-strumenti per risolvere
questo problema.
>> La prima cosa che dobbiamo fare è leggere il students.txt file.
Il comando cat farà proprio questo.
Si legge nel file specificato e scrivere
suo contenuto stdout.
Dopo aver letto il file di testo, faremo
desidera ordinare i nomi.
Il comando sort in grado di gestire questo per noi.
Ordina produrrà la linea di alimentazione tramite stdin su stdout
in modo ordinato.
Per fornire il contenuto di students.txt a
stdin sorta, si potrebbe utilizzare un tubo per combinare gatto e di ordinamento.
Quindi posso eseguire cat students.txt | sort e
premere Invio.
E ora, vediamo il contenuto di students.txt in
ordine alfabetico.
>> Quindi cerchiamo di aggiungere un altro comando -
uniq, o unico -
alla nostra pipeline.
Come si può immaginare, uniq, quando fornito una sequenza ordinata di
linee tramite stdin, produrrà le linee uniche.
Così ora abbiamo students.txt gatto
| Sort | uniq.
Infine, siamo in grado di salvare l'output del gasdotto a una
file tramite cat students.txt | sort | uniq
> Final.txt.
Quindi, se ci apriamo final.txt, abbiamo esattamente quello che ci
cercando:
un elenco di nomi univoci in ordine alfabetico,
salvato in un file di testo.
Tra l'altro, abbiamo anche potuto dire sort <
students.txt | uniq> final.txt di fare esattamente
la stessa cosa, con ciascuno degli operatori che abbiamo visto in
questo video.
>> Il mio nome è Tommy, e questo è CS50.