[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.