[Powered by Google Translate] TOMMY: В этом видео мы узнаем о
перенаправление и труб.
До сих пор мы использовали такие функции, как Printf к
вывод данных на терминал и функций, таких как GetString
позволяет пользователю вносить вклад в наше
программы с помощью клавиатуры.
Давайте быстро взглянем на программу, которая получает линии
ввод от пользователя, а затем выводит его.
>> В строке 7, мы с помощью которого пользователь строку, а
Затем в строке 8, мы распечатав его обратно.
Давайте скомпилировать и запустить нашу программу.
Великий.
Строка мы предоставили была эхом
к нам на терминал.
Это произошло потому, Е функция писал
Поток называется стандартный вывод, или с-т-д-аут.
Когда что-то выводится на стандартный вывод, то по умолчанию
отображаться в терминале.
>> Так что все хорошо, но что, если вместо того, чтобы просто
отображением строки, мы хотели сохранить его в файл?
Например, мы могли бы точно помню, что наш
Программа сделал, когда мы дали ему определенный вход позже.
Один подход был бы сделать это в нашей программе C, используя
некоторые специальные функции для записи файлов, которые мы будем
см. в другое видео.
Еще проще, хотя-бы как-то
перенаправить стандартный вывод в файл.
Таким образом, когда Printf пишет в стандартный вывод, содержание будет
быть записаны в файл, а не
отображаться в терминале.
Мы можем сделать это, добавив знак больше, а затем
на имя файла, в команде мы используем, чтобы выполнить нашу программу.
>> Таким образом, вместо того, чтобы просто выполнение. / Перенаправления, мы можем
запустите. / перенаправления, а затем знак больше, а затем
Файл, как file.txt.
Давайте посмотрим, что происходит.
OK.
Обратите внимание, что на этот раз ничего не отображается на терминале,
но мы не изменили содержание наших
C программой на всех.
Давайте теперь рассмотрим содержимое этого каталога с лат.
>> Хорошо.
Теперь у нас есть новый файл в нашем каталоге с именем file.txt,
, которая является имя файла мы поставили, когда мы запустили наш
Перенаправление программы.
Давайте открывать file.txt.
И вот, мы видим, что стандартный вывод из перенаправить было
записываются в файл с именем file.txt.
Так что давайте выполнения предыдущей команды снова, но поставки
другой вход в этот раз.
Хорошо.
Давайте взглянем на file.txt сейчас.
>> Мы видим здесь, что файл был перезаписан, так что наше
Оригинальный вход больше не существует.
Если мы вместо этого хотите добавить в этот файл, поставив новые
вход ниже существующего содержимого файла, мы можем
использовать два больше, чем знаки, а не только один.
Давайте попробуем.
Теперь, если мы откроем file.txt снова мы видим, как наши
входных линий.
В некоторых случаях, мы могли бы отказаться от любого
Выход нашей программы.
Вместо того, чтобы писать вывод в файл, а затем удаление
Файл, когда мы покончим с этим, мы можем написать в специальной
файл / Dev / нуль.
Когда что-нибудь записать в / dev/null--
или просто devnull для краткости -
она автоматически удаляется.
Так что думаю о devnull как черная дыра для ваших данных.
>> Итак, мы видели, как знак больше может перенаправить
стандартный вывод, давайте посмотрим, как мы можем перенаправить стандартный В -
или с-т-д-в -
Аналог стандартный вывод.
В то время как функции, как Printf записи в поток называется
стандартный вывод, GetString и аналогичные функции чтения из потока
называется стандартного ввода, который, по умолчанию, является поток
символы, вводимые с клавиатуры.
Мы можем перенаправить стандартный ввод использованием менее знаком, а затем
по имени файла.
Теперь, вместо запроса пользователя для входа в
терминал, программа откроет файл мы указали и использовать
его линии в качестве входных данных.
>> Давайте посмотрим, что происходит.
Великий.
В первой строке file.txt была напечатана в терминал
потому, что мы называем GetString раз.
Если бы мы имели еще один вызов GetString в нашей программе,
Следующая строка file.txt было бы использовать в качестве
вход на этот призыв.
Опять же, мы не изменили нашу программу C на всех.
Мы только изменить то, как мы его запуска.
А также помните, что мы не стандартный вывод перенаправлен на этот раз,
так что на выходе из программы все еще
отображаться в окне терминала.
Мы можем, конечно, перенаправить стандартный ввод
и стандартный вывод, как это.
Теперь, file2.txt содержит первую строку file.txt.
>> Таким образом, использование этих операторов, мы были в состоянии прочитать и
записи из текстовых файлов.
Теперь, давайте посмотрим, как мы можем использовать вывод одной программы,
вход в другую программу.
Итак, вот еще один простой программы C Я
были здесь называют hello.c.
Как вы можете видеть, это просто выводит "Привет
там! "для пользователя.
Если я хочу перенаправить использовать в качестве входных выход привет -
другая программа -
Я сначала может перенаправить стандартный вывод привет в файл с именем
input.txt, а затем перенаправить поток ввода перенаправление на том же
файл - input.txt.
Так что я могу сделать. / Привет> input.txt.
Нажмите клавишу Enter, чтобы выполнить это.
Последовал. / Переадресация <
input.txt, и выполнить это.
Таким образом, мы можем сократить это немного точкой с запятой, что позволяет
нам для запуска двух или более команд на той же линии.
Поэтому я могу сказать,. / Привет> input.txt, точка с запятой,
. / Переадресация <input.txt.
>> Так это работает, но он по-прежнему чувствует себя довольно безвкусный.
Я имею в виду, мы действительно нуждаемся этот файл посредника текст, который
Больше нет необходимости после перенаправления работает?
К счастью, мы можем избежать этого дополнительного текстового файла, используя то, что
называется трубы.
Если я скажу, / Привет |.. / Перенаправление, то стандартный вывод
Программа на левом -
В этом случае, привет -
будет использоваться в качестве стандартного ввода для
Программа справа.
В этом случае перенаправление. Так давайте выполним это.
>> Там мы идем.
Мы видим, что выход привет был использован в качестве входного
для перенаправления.
По нанизывая команды вместе с помощью трубы, мы формируем то, что
называется трубопровода, так как наша продукция в основном движущиеся
через последовательность команд.
Использование труб, мы можем сделать некоторые классные вещи без необходимости
писать код на всех.
Например, предположим, что мы хотим знать, как много файлов
Внутри этого каталога.
Использование трубы, мы можем объединить Ls команды с туалетом -
или WordCount -
команды.
Ls будет выводить каждый файл в каталоге на экран и
туалет скажет нам, сколько строк было дано ему с помощью стандартного ввода.
Таким образом, если мы говорим LS | ЧМ-л ​​-
поставка-л флаг туалет, чтобы сказать ему рассчитывать линий -
мы можем точно узнать, сколько файлов
в текущем каталоге.
>> Итак, давайте взглянем на еще один пример.
У меня здесь есть файл под названием students.txt,
со списком имен.
Однако эти имена не являются в любом порядке все это, и это выглядит
как несколько названий повторяются.
Что мы хотим это список уникальных имен в алфавитном
порядке, сохраняются в файле с именем final.txt.
Мы могли бы, конечно, написать программу C, чтобы сделать это для нас.
Но он собирается получить излишне
Комплекс довольно быстро.
Давайте вместо этого использовать трубы и некоторые встроенные в средства для решения
этой проблеме.
>> Первое, что нужно сделать, это прочитать файл students.txt.
Кошка команда будет делать именно это.
Он будет читать в указанный файл и писать
его содержимое в стандартный вывод.
После того как мы прочитать текстовый файл, мы будем
хотите отсортировать имена.
Сортировка команда может справиться с этим для нас.
Сортировка будет выводить линии подается через стандартный ввод на стандартный вывод
в определенном порядке.
В целях обеспечения содержания students.txt к
стандартного ввода рода, мы могли бы использовать трубы объединить кота и сортировки.
Так что я могу выполнить кошка students.txt | сортировки и
нажмите клавишу Enter.
И теперь мы видим, что содержание в students.txt
алфавитном порядке.
>> Поэтому давайте добавим другую команду -
Uniq, или уникальным -
в нашем трубопроводе.
Как вы можете догадаться, Uniq, когда поставляемые отсортированы последовательность
линии через стандартный ввод, будет выводить уникальные линии.
Так что теперь у нас есть кошка students.txt
| Рода | Uniq.
Наконец, мы можем сэкономить на выходе трубопровода
файл с помощью кошки students.txt | рода | Uniq
> Final.txt.
Таким образом, если мы открываем final.txt, у нас есть именно то, что мы были
ищет:
Список уникальные имена в алфавитном порядке,
сохранены в текстовом файле.
Кстати, мы также могли бы сказать рода <
students.txt | Uniq> final.txt делать то,
то же самое, используя каждый из операторов мы видели в
это видео.
>> Меня зовут Томми, и это CS50.