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