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