[Powered by Google Translate] Tommy: W tym filmie dowiemy się o
przekierowanie i rur.
Do tej pory używaliśmy funkcji, takich jak printf
dane wyjściowe do terminalu i funkcje, takie jak getString
, aby umożliwić użytkownikowi wkład do naszej
Program za pomocą klawiatury.
Niech szybko zapoznać się z programem, który pobiera linię
Wejście od użytkownika, a następnie wysyła go.
>> W linii 7, jesteśmy monitowania użytkownika ciąg znaków, a
następnie na linii 8, mamy drukowanie z powrotem.
Załóżmy, skompilować i uruchomić nasz program.
Great.
Ciąg dostarczyliśmy poparło powrotem
do nas na terminalu.
Stało się tak, ponieważ funkcja printf napisał
Strumień z nazywa standardowa lub S-t-d-z.
Kiedy coś jest napisane na stdout, to domyślnie
wyświetlana przez terminal.
>> Więc to jest wszystko dobrze, ale co, jeśli zamiast po prostu
wyświetlania ciąg, chcieliśmy go zapisać do pliku?
Na przykład, chcemy pamiętać właśnie nasz
program zrobił gdy daliśmy mu szczególny wkład później.
Pierwsze podejście do tego w naszym programie C, stosując
pewne specjalne funkcje do pisania do plików, które będziesz
zobaczyć w innym filmie.
Jeszcze łatwiej, choć będzie jakoś
przekierować stdout do pliku.
W ten sposób, kiedy printf pisze do stdout, zawartość będzie
być zapisywane w pliku, a nie
wyświetlana przez terminal.
Można zrobić tak, że przez dodanie znak większości, a następnie
przez nazwę pliku, do polecenia używamy do realizacji naszego programu.
>> Tak więc, zamiast po prostu wykonywać. / Redirect, możemy
uruchom. / przekierowanie, a następnie znak większości, a następnie
filename, jak plik.txt.
Zobaczmy, co się dzieje.
OK.
Należy zauważyć, że w tym czasie, nic nie wyświetlany w terminalu,
ale nie zostały one zmodyfikowane zawartości naszych
Program C w ogóle.
Przyjrzyjmy się teraz, zawartość tego katalogu z ls.
>> Dobrze.
Mamy teraz nowy plik w naszym katalogu o nazwie plik.txt,
która to nazwa pliku dostarczyliśmy gdy biegaliśmy do naszego
Przekierowanie program.
Otwórzmy się plik.txt.
I tu widać, że stdout z przekierowanie było
zapisywane w pliku o nazwie plik.txt.
Więc uruchomieniu polecenia ponownie, ale dostarczanie
inaczej wejście tym razem.
Okay.
Rzućmy okiem na file.txt teraz.
>> Widzimy tutaj, że plik został nadpisany, więc nasze
Oryginalny wejściowy nie jest już tam.
Jeśli natomiast chcesz dołączyć do tego pliku, stawiając nowy
wejście poniżej istniejących zawartości pliku, możemy
zastosować dwie większe niż znaki zamiast jednego.
Spróbujmy tego.
Teraz, jeśli otworzymy file.txt kolejny możemy zobaczyć zarówno naszych
linie wejściowe.
W niektórych przypadkach, może chcemy, aby odrzucić
Wyjście naszego programu.
Zamiast pisać wyjście do pliku, a następnie usunąć
Plik kiedy skończymy z tym, możemy napisać do specjalnych
Plik o nazwie / dev / null.
Kiedy coś jest napisane w / dev/null--
lub po prostu devnull na krótkie -
jest automatycznie odrzucane.
Więc myślę o devnull jako czarna dziura dla Twoich danych.
>> Więc teraz widzieliśmy jak znak większości można przekierować
stdout, zobaczmy, w jaki sposób możemy przekierować standard -
lub S-t-d-w -
analogiem stdout.
Chociaż funkcje jak printf pisać do strumienia zwanego
stdout, GetString i podobne funkcje odczytu ze strumienia
nazywane stdin które domyślnie jest strumień
znaki wpisywane z klawiatury.
Możemy przekierować stdin przy użyciu mniej niż znak, a następnie
według nazwy pliku.
Teraz, zamiast monitowania użytkownika o wejściu na
terminal, program otworzy plik, możemy określić i wykorzystać
jego linie jako wejście.
>> Zobaczmy, co się dzieje.
Great.
Pierwsza linia plik.txt został wydrukowany na terminal
bo dzwonisz getString raz.
Jeśli mieliśmy innego połączenia do getString w naszym programie,
Następny wiersz plik.txt została wykorzystana jako
Wejście do tej rozmowy.
Ponownie, nie zmieniły nasz program C w ogóle.
Jesteśmy tylko zmiany, jak go uruchomić.
I pamiętać, nie mamy przekierowanie stdout ten czas,
Wyjście to program nadal
wyświetlany na terminalu.
Możemy, oczywiście, przekierowanie zarówno stdin
i stdout tak.
Teraz plik2.txt zawiera pierwszą linię plik.txt.
>> Tak więc, za pomocą tych operatorów, byliśmy w stanie przeczytać i
pisać z plików tekstowych.
Teraz zobaczmy jak możemy użyć wyjścia jednego programu
Wejście do innego programu.
Tak tu jest kolejny prosty program w C I
które tutaj nazywa hello.c.
Jak widać, to po prostu wysyła "Hi
tam "dla użytkownika.
Jeśli chcę przekierować używany jako wejście wyjście hello -
inny program -
Może pierwszy raz przekierować stdout cześć pliku o nazwie
input.txt, a następnie przekierować stdin przekierować do tego samego
file - input.txt.
Więc nie mogę zrobić. / Hello> input.txt.
Naciśnij Enter, aby wykonać to.
Następnie. / Redirect <
input.txt i wykonać to.
Tak więc możemy skrócić ten trochę z średnikiem, który pozwala
nas do uruchomienia dwóch lub więcej poleceń na tej samej linii.
Więc mogę powiedzieć,. / Hello> input.txt, średnik,
. / Redirect input.txt <.
>> Tak to działa, ale nadal czuje się całkiem nieeleganckie.
To znaczy, czy naprawdę musimy ten plik tekstowy pośrednika, który jest
nie jest już konieczne, po przekierowanie działa?
Na szczęście, możemy uniknąć tego dodatkowego pliku tekstowego, co jest
zwane rury.
Jeśli powiem, / hello |.. / Przekierowania, wtedy stdout
Program po lewej -
w tym przypadku, hello -
będzie jako standardowe wejście dla
Program na prawo.
W tym przypadku, przekierowanie. Więc uruchom to.
>> Proszę bardzo.
Można zauważyć, że sygnał wyjściowy zastosowano HELLO jako wejścia
za przekierowanie.
, Spinając ze sobą za pomocą polecenia Rury, tworzymy to, co znajduje się
zwany gazociąg, gdyż nasza produkcja jest przede wszystkim przeniesienie
przez sekwencję poleceń.
Korzystanie z rur, możemy zrobić kilka fajnych rzeczy, bez konieczności
pisania kodu w ogóle.
Na przykład, powiedzmy, że chcemy wiedzieć, jak wiele plików są
wewnątrz tego katalogu.
Korzystanie z rury, możemy połączyć polecenia ls z wc -
lub wordcount -
polecenia.
Ls wyświetli wszystkie pliki w katalogu do stdout, oraz
wc powie nam, ile wierszy zostało nadane mu przez stdin.
Tak więc, jeśli mówimy ls | wc-l -
dostarczanie flagę-l do WC, aby poinformować go policzyć wiersze -
możemy zobaczyć, ile dokładnie pliki są
w bieżącym katalogu.
>> Warto więc spojrzeć na jeszcze jeden przykład.
Mam tu plik o nazwie students.txt,
z listą nazwisk.
Jednak te nazwy nie są w dowolnej kolejności, to wszystko, i wygląda
jak kilka nazwisk są powtarzane.
Chcemy lista unikatowych nazw w kolejności alfabetycznej
porządek, zapisany w pliku o nazwie final.txt.
Możemy, oczywiście, napisać program w C to zrobić za nas.
Ale dostanie niepotrzebnie
Kompleks dość szybko.
Załóżmy, zamiast używać rur i kilka wbudowanych narzędzi do rozwiązania-
ten problem.
>> Pierwszą rzeczą, którą musisz zrobić, to przeczytać students.txt pliku.
Polecenie cat będzie nie tylko to.
Będzie on odczytywany w określonym pliku i zapisu
jego zawartość na standardowe wyjście.
Po skopiowaniu pliku tekstowego, dowiemy
Aby posortować nazwy.
Polecenie sort może obsłużyć to dla nas.
Sortuj wyświetli linię dostarczonego przez stdin na stdout
w uporządkowanej kolejności.
W celu dostarczenia zawartości students.txt do
Sortuj w stdin, możemy użyć rury połączyć kota i sortowania.
Więc mogę wykonaj cat students.txt | sort i
naciśnij klawisz Enter.
A teraz widzimy zawartość students.txt w
w porządku alfabetycznym.
>> Dodajmy kolejne polecenia -
uniq lub wyjątkowy -
do naszego rurociągu.
Jak można się domyślać, Uniq, gdy dostarczane posortowanej sekwencji
linie poprzez stdin wyświetli unikalne linie.
Więc teraz mamy students.txt kota
| Sort | uniq.
Wreszcie, możemy zapisać wyjście rurociągu
plików przez kota students.txt | sort | uniq
> Final.txt.
Tak więc, jeśli otwieramy final.txt, mamy dokładnie to, co my
szukam:
lista unikatowych nazw w kolejności alfabetycznej,
zapisane w pliku tekstowym.
Nawiasem mówiąc, również mógł powiedzieć sort <
students.txt | uniq> final.txt zrobić dokładnie
samo, wykorzystując każdy z podmiotów, które widzieliśmy w
ten film.
>> Nazywam się Tommy, i to jest CS50.