[Powered by Google Translate] TOMMY: În acest videoclip, vom afla mai multe despre
redirecționarea și conducte.
Până acum, am fost folosind funcții cum ar fi printf să
date de ieșire la terminalul și funcțiile similare getString
pentru a permite utilizatorului să ofere informații noastră
program folosind tastatura.
Să aruncăm o privire la rapid un program care devine o linie de
de intrare de la utilizator și apoi să emită.
>> Pe linia 7, suntem fapt care ia determinat utilizatorul pentru un șir, și
apoi pe linia 8, ne-l imprimați înapoi.
Să compila și executa programul nostru.
Mare.
Șir am oferit a fost trimis inapoi
la noi la terminal.
Acest lucru sa întâmplat pentru că funcția printf scris într-o
curs de apa strigat de iarnă, sau s-t-d-out.
Când ceva este scris la stdout, e în mod implicit
afișată de terminale.
>> Deci, asta e tot bine și bună, dar ce se întâmplă dacă, în loc de pur și simplu
afișarea șir, am vrut să-l salvați într-un fișier?
De exemplu, am putea dori să-și amintească exact ce ne
Programul de făcut atunci când am dat un anumit input mai târziu.
O abordare ar fi să se facă acest lucru în programul nostru de C, utilizând
unele funcții speciale pentru scrierea fișierelor pe care le voi
a se vedea într-un alt film.
Chiar mai ușor, deși, ar trebui să fie într-un fel
redirect stdout într-un fișier.
În acest fel, atunci când scrie printf la stdout, conținutul va
fi scrise într-un fișier, mai degrabă decât
afișată de terminale.
Noi putem face doar că, prin adăugarea unui semn mai mare decât, urmat
printr-un nume de fișier, pentru a comanda vom folosi pentru a executa programul nostru.
>> Deci, mai degrabă decât pur și simplu de executare / redirect,. Putem
rulați / redirect., urmat de un semn mai mare, urmată de
Filename, cum ar fi file.txt.
Să vedem ce se întâmplă.
OK.
Observați că de această dată, nimic nu a fost afisat la terminal,
dar nu au modificat conținutul nostru
C program la toate.
Să examinăm acum conținutul acestui director cu ls.
>> Bine.
Avem acum un nou fișier în directorul nostru numit file.txt,
care este numele fișierului am furnizat atunci când ne-am întâlnit nostru
Redirect program.
Să deschidem file.txt.
Și aici, putem vedea că stdout din redirecționare a fost
scris fișier numit file.txt.
Deci, haideți să rulați comanda anterioară din nou, dar furnizează o
intrare diferit de data asta.
Bine.
Să aruncăm o privire la file.txt acum.
>> Putem vedea aici că dosarul a fost suprascris, asa nostru
intrare original nu este acolo.
Dacă ne în schimb doriți să adăugați la acest dosar, punerea noua
de intrare de mai jos conținutul existent al fișierului, putem
utilizați două mai mare decât semne în loc de unul singur.
Să încercăm asta.
Acum, dacă vom deschide din nou file.txt, putem vedea atat al nostru
intrare linii.
În unele cazuri, s-ar putea dori să se debaraseze orice
de ieșire a programului nostru.
, Mai degrabă decât scris de ieșire într-un fișier și apoi ștergerea
fișierul atunci când am terminat cu ea, putem scrie o la construcții
fișier numit / dev / null.
Atunci când ceva este scris / dev/null--
sau devnull doar pentru scurt -
acesta este automat eliminată.
Deci, cred că a devnull ca o gaura neagra pentru datele tale.
>> Deci, acum am văzut cum semnul mai mare decât cea care poate redirecționa
stdout, să vedem cum putem redirecționa standard în -
sau s-t-d-in -
analog al stdout.
În timp ce funcțiile place să scrie printf curs de apa numit
stdout, getString și funcții similare citit din fluxul
numit stdin, care, în mod implicit, este fluxul de
caractere tastat la tastatura.
Ne putem redirecționa stdin folosind mai puțin de semn, urmat
printr-un nume de fișier.
Acum, mai degrabă decât determinat de utilizator pentru intrare la
terminale, un program se va deschide fișierul am specificat și de a folosi
liniile sale ca intrare.
>> Să vedem ce se întâmplă.
Mare.
Prima linie de file.txt a fost tipărită la terminalul
pentru ca suntem de asteptare getString o dată.
Dacă am fi avut un alt apel la getString în programul nostru,
următoarea linie de file.txt ar fi fost folosite ca
de intrare la acel apel.
Din nou, nu ne-am modificat programul nostru C, la toate.
Suntem doar schimbă modul în care o executați.
Și amintiți-vă, de asemenea, nu ne-am redirecționat stdout acest timp,
astfel de ieșire a programului a fost încă
afișate la terminal.
Ne putem, desigur, atât de redirecționare stdin
și consolă de genul asta.
Acum, file2.txt conține prima linie de file.txt.
>> Deci, folosind aceste operatori, am fost capabili să citească și
scrie din fișiere text.
Acum, să vedem cum putem folosi de ieșire a unui program ca
de intrare la un alt program.
Deci, aici e un alt program simplu C I
au chemat aici hello.c.
După cum puteți vedea, aceasta pur și simplu scoate "Max
acolo "a utilizatorului!.
Dacă vreau să redirecționeze utilizați ca intrare de ieșire de salut -
un alt program -
Aș putea redirecționa prima stdout de salut într-un fișier numit
INPUT.TXT, apoi redirecționați stdin din redirecționare a aceleiași
fișier - INPUT.TXT.
Deci, eu pot face. / Salut> INPUT.TXT.
Apăsați Enter pentru a executa acest lucru.
Urmat de. / Redirect <
INPUT.TXT, si veti executa.
Astfel încât să putem scurta acest bit o cu un punct și virgulă, care permite
ne să curgă la două sau mai multe comenzi pe aceeași linie.
Deci, eu pot spune,. / Buna ziua> INPUT.TXT, punct și virgulă,
/ Redirect. <INPUT.TXT.
>> Deci aceasta funcționează, dar încă se simte destul de putin elegant.
Adică, avem nevoie de acest fișier text care este intermediar
nu mai este necesară, după redirect ruleaza?
Din fericire, putem evita acest fișier text suplimentar folosind ceea ce e
numit-o țeavă.
Dacă spun, / salut |.. / Redirect, apoi stdout de
Programul pe stanga -
în acest caz, salut -
vor fi folosite ca standard de intrare pentru
Programul pe dreapta.
În acest caz, redirecționare. Deci, haideți să rulați acest lucru.
>> Acolo mergem.
Putem vedea că producția de salut a fost folosit ca intrare
pentru redirecționare.
Prin insiruirea comenzi, împreună cu conducte, noi formăm ce e
numit-o conductă, deoarece producția noastră este în esență în mișcare
printr-o secvență de comenzi.
Folosind conducte, putem face unele chestii misto, fără a fi nevoie să
scrie orice cod de la toate.
De exemplu, să presupunem că vrem să știm cât de multe fișiere sunt
în interiorul acestui director.
Folosind o țeavă, putem combina comanda ls cu wc -
sau wordcount -
comandă.
Ls va afișa fiecare fișier în directorul la stdout, și
WC ne va spune cât de multe linii s-au dat să-l prin intermediul stdin.
Deci, dacă spunem ls | wc-l -
furnizarea de pavilion să-l WC să-l spun pentru a număra de linii -
putem vedea exact cât de multe fișiere sunt
în directorul curent.
>> Deci, haideți să aruncăm o privire la un exemplu mai mult.
Am aici un fișier numit students.txt,
cu o listă de nume.
Cu toate acestea, aceste nume nu sunt în orice ordine totul, și se pare
cum ar fi cateva nume sunt repetate.
Ceea ce ne dorim este o listă de nume unice în ordine alfabetică
Pentru, salvate într-un fișier numit final.txt.
Am putea, desigur, scrie un program C pentru a face acest lucru pentru noi.
Dar va pentru a obține în mod inutil
Complexul destul de repede.
Să folosim în locul conductelor și unele built-in-unelte pentru a rezolva
această problemă.
>> Primul lucru pe care trebuie să faceți este să citiți fișierul students.txt.
Comanda pisica va face doar asta.
Acesta va citi în fișierul specificat și de a scrie
conținutul său la stdout.
După ce am citit fișierul text, vă vom
doriți să sortați numele.
Comanda sortare poate suporta acest lucru pentru noi.
Sortare va afișa linia furnizate prin intermediul stdin la stdout
sortate în ordine.
În scopul de a furniza conținutul students.txt la
stdin fel, am putea folosi o țeavă de a combina pisică și de sortare.
Deci, eu pot executa pisica students.txt | sortare și
apăsați Enter.
Și acum, vom vedea conținutul students.txt în
în ordine alfabetică.
>> Deci, haideți să adăugați o altă comandă -
Uniq, sau unic -
la conducta noastre.
Așa cum cred că ați ghicit, Uniq, atunci când sunt prestate de o secvență sortată
linii prin intermediul stdin, va genera liniile unice.
Deci, acum avem students.txt pisica
| Sortare | Uniq.
În cele din urmă, putem salva de ieșire a conductei la un
fișier prin intermediul pisica students.txt | sortare | Uniq
> Final.txt.
Deci, dacă ne deschidem final.txt, avem exact ceea ce am fost
In cautare de:
o listă de nume unice în ordine alfabetică,
salvate într-un fișier text.
Apropo, am fi putut spune, de asemenea, un fel <
students.txt | Uniq> final.txt să facă exact
același lucru, folosind fiecare dintre operatorii care le-am văzut în
acest videoclip.
>> Numele meu este Tommy, iar acest lucru este CS50.