[Powered by Google Translate] TOMMY: U ovom video, mi ćemo naučiti o
preusmjeravanje i cijevi.
Do sada smo bili pomoću funkcije poput printf na
izlazni podaci na terminalu i funkcije poput GetString
kako bi se omogućilo korisniku da omogućavaju ulaz na naše
Program pomoću tipkovnice.
Ajmo brzo pogledati program koji dobiva liniju
ulaz od korisnika, a zatim ga šalje.
>> Na liniji 7, mi smo pitajući korisnika za niz, a
zatim na liniji 8, mi smo ga ispisujete natrag.
Ajmo sastaviti i pokrenuti naš program.
Izvrsno.
Niz pod uvjetom da je reagirao i natrag
da nas kontaktirate na terminalu.
To se dogodilo zato što je printf funkcija pisao
tok naziva standardnom van, ili s-t-d-out.
Kad je nešto napisano na stdout, to je po defaultu
prikazati terminala.
>> Tako da je sve dobro i dobro, ali što ako, umjesto da jednostavno
prikazujući niz, htjeli smo ga spremiti u datoteku?
Na primjer, možda bismo željeli da se točno sjetiti što naš
Program je kad smo dali poseban ulaz kasnije.
Jedan od pristupa bio bi to učiniti u našoj C programu, pomoću
neke posebne funkcije za pisanje u datoteke koje ćemo
vidjeti u drugom videu.
Čak i lakše, iako, da bi se nekako
preusmjeravanje stdout u datoteku.
Na taj način, kada printf piše na stdout, sadržaj će
biti napisan na datoteku umjesto
prikazati terminala.
Možemo učiniti samo da dodavanjem veće od znaka, zatim
po nazivu datoteke, naredbi možemo koristiti za izvršavanje naš program.
>> Dakle, umjesto da jednostavno izvršenja. / Preusmjeravanje, možemo
pokrenuti. / preusmjeravanje, nakon čega slijedi veći od znaka, nakon čega slijedi
filename, kao file.txt.
Idemo vidjeti što se događa.
OK.
Primjetite da ovaj put, ništa nije prikazana na terminalu,
ali nismo izmjena sadržaja našeg
C program uopće.
Idemo sada ispitati sadržaj ovaj direktorij sa ls.
>> U redu.
Mi sada imamo novu datoteku u našem imeniku zove file.txt,
koje je ime datoteke smo dobili kada smo trčali naš
Preusmjeravanje program.
Ajmo otvoriti file.txt.
I ovdje, možemo vidjeti da je stdout od preusmjeriti bio
napisan na datoteku pod nazivom file.txt.
Tako ćemo pokrenuti prethodne naredbe opet, ali opskrbu
drukčiji ulaz ovaj put.
Ok.
Idemo pogledati file.txt sada.
>> Možemo vidjeti da se ovdje datoteka je prepisan, tako naša
Izvorni ulaz ne postoji više.
Ako smo umjesto želite dodati u ovoj datoteci, stavljajući novi
ulazni ispod postojećih sadržaja datoteke, možemo
koristiti dvije veće od znakova umjesto samo jednog.
Pokušajmo.
Sada, ako smo otvorili file.txt opet, možemo vidjeti i našeg
ulazne linije.
U nekim slučajevima, možda bismo željeli odbaciti bilo
izlaz našeg programa.
Umjesto pisanja izlaz u datoteku, a zatim brisanje
datoteka kad završimo s njim, možemo pisati da posebna
file naziva / dev / null.
Kada se nešto napisano na / dev/null--
ili samo devnull za kratko -
to automatski odbacuju.
Dakle, mislim devnull kao crnu rupu za svoje podatke.
>> Dakle, sada smo vidjeli kako je veća nego znak može preusmjeriti
stdout, neka je vidjeti kako možemo preusmjeriti standard u -
ili s-t-d-u -
analogni od stdout.
Iako djeluje kao printf pisati potoka zove
stdout, GetString i slične funkcije čitati iz potoka
zove stdin, koji, po defaultu, je tok
znakova upisali na tipkovnici.
Možemo preusmjeriti stdin koristeći manje nego znak, slijedi
po datoteke.
Sada, umjesto pitajući korisnika za ulaz u hotelu The
terminala, program će otvoriti datoteku smo naveli i koristiti
njegove linije kao ulaz.
>> Idemo vidjeti što se događa.
Izvrsno.
U prvom redu file.txt je tiskan na terminal
jer smo zovete GetString jednom.
Ako smo imali još jedan poziv na GetString u našem programu,
Sljedeći linija file.txt bi bila korištena kao
Ulaz na taj poziv.
Opet, nismo izmjena našu C programa uopće.
Mi samo Mijenjamo kako ga pokrenuti.
I također sjetiti, nismo preusmjereni stdout ovaj put,
tako da je izlaz iz programa bio je još
prikazana na terminalu.
Možemo, naravno, preusmjeravanje i stdin
i stdout ovako.
Sada, file2.txt sadrži prvu liniju file.txt.
>> Dakle, pomoću tih operatora, mi smo bili u mogućnosti čitati i
pisati iz tekstualne datoteke.
Sada, neka je vidjeti kako možemo koristiti izlaz jednog programa kao
Ulaz na drugom programu.
Dakle, ovdje je još jedan jednostavan C program sam
su ovdje zove hello.c.
Kao što možete vidjeti, to jednostavno izlazi "Bok
tamo! "za korisnika.
Ako želim preusmjeriti koristiti kao ulaz izlaz halo -
drugi program -
Prvi put sam mogao preusmjeriti stdout od hello datoteku naziva
input.txt, zatim preusmjerite stdin od preusmjeriti na taj isti
file - input.txt.
Dakle, ja mogu učiniti. / Halo> input.txt.
Pritisnite Enter za izvršenje ovo.
Slijedi. / Preusmjeravanje <
input.txt, i izvršiti to.
Tako možemo skratiti ovo malo sa zarezom, koji omogućuje
nas pokrenuti dva ili više naredbi na istoj liniji.
Dakle, ja mogu reći,. / Halo> input.txt, zarez,
. / Preusmjeravanje <input.txt.
>> Tako se to radi, ali to još uvijek osjeća prilično neelegantan.
Mislim, mi stvarno treba ovu sliku posrednik tekst koji je
više nije potrebno nakon preusmjeravanje staze?
Srećom, možemo izbjeći ovaj dodatni tekst datoteku koristeći ono što je
zove cijevi.
Ako kažem, / halo |.. / Preusmjeriti, onda stdout od
Program na lijevo -
u ovom slučaju, halo -
će se koristiti kao standardni ulaz za
Program na desnoj strani.
U ovom slučaju, preusmjeravanje. Tako ćemo pokrenuti ovo.
>> Tu ćemo ići.
Možemo vidjeti da je izlaz Hello je služila kao ulaz
za preusmjeravanje.
Do nizanje naredbe zajedno pomoću cijevi, što čine ono što je
zove plinovoda, jer naš izlaz u suštini se kreće
kroz niz naredbi.
Korištenje cijevi, možemo napraviti neke cool stvari bez potrebe za
pisati bilo kod uopće.
Na primjer, recimo da želimo znati koliko su datoteke
unutar ovog direktorija.
Korištenje cijevi, možemo kombinirati ls naredbe s wc -
Broj riječi ili -
naredba.
Ls emitirat će svaku datoteku u direktorij na stdout, a
wc će nam reći koliko linija dobili su na njega putem stdin.
Dakle, ako kažemo li | wc-l -
dobavu-l zastavu na wc to reći računati linije -
možemo točno vidjeti koliko su datoteke
u trenutnom direktoriju.
>> Tako ćemo pogledati još jedan primjer.
Imam ovdje datoteku pod nazivom students.txt,
s popisom imena.
Međutim, ta imena nisu u bilo kojem redoslijedu to sve, i to izgleda
kao što su prije nekoliko imena ponavlja.
Ono što želimo je popis jedinstvenih imena u abecednom
bi, spremiti u datoteku pod nazivom final.txt.
Mogli bismo, naravno, napisati C program to učiniti za nas.
No, to će se nepotrebno
kompleks prilično brzo.
Hajdemo umjesto toga koristiti cijevi i neke ugrađene alate za rješavanje
ovaj problem.
>> Prva stvar koju trebate učiniti je čitati datoteke students.txt.
Naredba mačka će učiniti upravo to.
To će pročitati u navedenom datoteku i napisati
njezin sadržaj na stdout.
Nakon što smo pročitali tekst datoteku, mi ćemo
želite sortirati imena.
Naredba vrsta može nositi ovo za nas.
Sortiraj emitirat će liniju isporučeni putem stdin na stdout
u sortiraju bi.
U cilju opskrbe sadržaj students.txt na
Sortiraj je stdin, možemo koristiti cijev kombinirati mačka i sortiranje.
Dakle, ja mogu izvršiti mačka students.txt | sortiranje i
pritisnite tipku Enter.
I sada, vidimo sadržaj students.txt u
abecednim redom.
>> Dakle, dodajmo još naredbe -
uniq, ili jedinstvena -
našem plinovoda.
Kao što ste mogli pogoditi, uniq, kada isporučuje sortirani niz
linije preko stdin, emitirat će jedinstvene linije.
Tako sada imamo mačka students.txt
| Sortiranje | uniq.
Konačno, možemo spasiti izlaz cjevovoda
file preko mačka students.txt | sortiranje | uniq
> Final.txt.
Dakle, ako ćemo otvoriti final.txt, imamo točno ono što smo bili
u potrazi za:
popis jedinstvenih imena po abecednom redu,
spremiti u tekstualnu datoteku.
Usput, mi također mogli rekao svojevrsno <
students.txt | uniq> final.txt učiniti točno
ista stvar, koristeći svaku od operatera smo vidjeli u
ovaj video.
>> Moje ime je Tommy, a ovo je CS50.