[Powered by Google Translate] ТОММИ: У овом видеу, ми ћемо научити о
преусмјеравање и цеви.
До сада смо користили функције као што су принтф да
излазне податке на терминалу и функције као што су ГетСтринг
да омогући кориснику да обезбеди улаз на наше
Програм помоћу тастатуре.
Идемо брзо да погледамо програм који добија линију
улаз од корисника, а затим га исписује.
>> На линији 7, ми навело корисника за ниске, а
затим на линији 8, ми смо га штампа назад.
Хајде да компајлирати и покренути наш програм.
Сјајно.
Низ смо дали је поновио назад
нам на терминалу.
То се десило зато што је функција принтф написао свом
поток зове стандардна напоље, или с-т-д-оут.
Када се нешто написано у стдоут, то је по дефаулту
приказује терминала.
>> Тако да је све лепо и добро, али шта ако, уместо да је једноставно
приказује стринг, хтели смо да га сачувате у датотеци?
На пример, можда ћемо желети да се сетим тачно шта наше
Програм је, када смо му дали касније одређени улаз.
Један приступ би био да се то уради у нашем Ц програма, користећи
неке посебне функције за писање у фајлове које ћемо
види у другом видеу.
Чак лакше, мада би се некако
преусмеравање стдоут у датотеку.
На тај начин, када иф пише у стдоут, садржај ће
бити написан у датотеци него
приказује терминала.
Можемо да урадимо управо то додавањем веће од знак, а затим
по имену датотеке, на команду користимо да изврши наш програм.
>> Дакле, уместо да једноставно извршавање / редирецт, ми. Да
рун / преусмеравање. следи већи од знака, а затим
фајла, као филе.ткт.
Хајде да видимо шта се дешава.
ОК.
Приметите да овај пут, ништа није приказана на терминалу,
али нисмо мењали садржај нашег
Ц програм на све.
Хајдемо сада испитати садржај овог директоријума са лс.
>> У реду.
Ми сада имамо нову датотеку у нашем каталогу зове филе.ткт,
што је назив фајла смо добили када смо наишли нашу
Преусмеравање програм.
Хајде да отворимо филе.ткт.
И овде, можемо видети да је стдоут од преусмеравање је
уписани у датотеку под називом филе.ткт.
Дакле, хајде да поново претходну команду, али снабдевање
различита улаза овај пут.
Ок.
Узмимо сада погледамо филе.ткт.
>> Овде можемо видети да је датотека била преписана, тако да је наш
оригинални улазни није више тамо.
Ако уместо тога желите да додате у овај фајл, стављајући нови
улаз испод постојећих садржаја фајла, можемо
користити две веће од знакова уместо само једног.
Хајде да пробамо то.
Сада, ако смо отворили филе.ткт опет, можемо видети обе наше
улазних линија.
У неким случајевима, можда ћемо желети да одбаците било
Излаз нашег програма.
Уместо писања излаз у датотеку, а затим брисање
фајл када смо завршили са тим, можемо да пишемо у специјалне
фајл који се зове / дев / нулл.
Када се било шта написано / дев/нулл--
или само девнулл за кратко -
аутоматски се одбацује.
Дакле, мислим девнулл као црна рупа за ваше податке.
>> Дакле, сада смо видели како је већа него знак да преусмери
стдоут, хајде да видимо како можемо преусмерити стандард -
или с-т-д-у -
аналог излаз.
Док функционише као иф писати потока под називом
стдоут, ГетСтринг и сличне функције чита из потока
зове стдин, који по дефаулту, је ток
карактера откуцан на тастатури.
Можемо преусмерити стдин користећи мање него знак, а затим
од фајла.
Сада, уместо што је навело корисника за унос у хотелу
терминала, програм ће отворити фајл који смо назначили и коришћење
њени редови као инпут.
>> Хајде да видимо шта се дешава.
Сјајно.
Прва линија филе.ткт је штампан на терминалу
зато зовемо ГетСтринг једном.
Ако смо имали још један позив да се ГетСтринг у нашем програму,
Следећи ред филе.ткт би да се користи као
Улаз на тај позив.
Опет, нисмо мењали наш Ц програм.
Ми само мењамо како смо га покренули.
И такође запамтите, нисмо преусмерени стдоут овај пут,
тако да излаз програма је и даље
приказују на терминалу.
Можемо, наравно, преусмеравају како стдин
и стдоут овако.
Сада, филе2.ткт садржи прву линију филе.ткт.
>> Дакле, коришћењем ових оператора, ми смо били у стању да чита и
пишем из текстуалних фајлова.
Сада, хајде да видимо како можемо да користимо излаз једног програма као
улаз за други програм.
Дакле, овде је још један једноставан Ц програм на који сам
овде се зове хелло.ц.
Као што можете да видите, то једноставно излази "Здраво
тамо "кориснику.
Ако желим преусмерити да се користи као улаз излаз здраво -
други програм -
Први пут сам могао преусмерити на стдоут здраво фајл под називом
инпут.ткт, затим преусмерити стдин за преусмеравање на тај исти
филе - инпут.ткт.
Тако да могу да урадим / здраво> инпут.ткт..
Притисните Ентер да бисте извршили ово.
Праћен. / Преусмеравање <
инпут.ткт и извршава то.
Дакле, можемо скратити ово мало са зарезом, који омогућава
да покрене две или више команде на истој линији.
Тако да могу да кажем. / Здраво> инпут.ткт, тачка и зарез,
/ Преусмеравање <инпут.ткт..
>> Тако то функционише, али је и даље осећа прилично неелегантан.
Мислим, да ли нам је заиста потребан тај посредничку текстуалну датотеку која је
Више није потребно после преусмеравање трчања?
Срећом, можемо избећи ову додатну текстуалну датотеку користећи оно што је
зове цев.
Ако кажем, / здраво |.. / Преусмеравање, онда стдоут у
програм на лево -
у овом случају, здраво -
ће се користити као стандардни улаз за
Програм на десној страни.
У овом случају, преусмеравају. Дакле, хајде да ово.
>> Ту смо.
Можемо видети да излаз Хелло је коришћен као улаз
за преусмеравање.
До низање команде заједно користећи цеви, формирају се шта је
зове гасовод, јер је наш излаз је у суштини креће
преко низа команди.
Користећи цеви, можемо да урадимо неке кул ствари, без потребе да
напише било који код уопште.
На пример, рецимо да желимо да знамо колико су датотеке
унутар овог директоријума.
Коришћење цеви, можемо комбиновати лс команду са ВЦ -
или вордцоунт -
команду.
Лс ће резултовати сваки фајл у директоријуму на стдоут, и
вц ће нам рећи колико је линија добили су на њега преко стдин.
Дакле, ако кажемо лс | вц-л -
снабдевање-л заставу вц да кажем да рачунају линије -
можемо тачно видети колико су датотеке
у текућем директоријуму.
>> Дакле, хајде да погледамо још један пример.
Овде имате фајл под називом студентс.ткт,
са листом имена.
Међутим, ова имена нису у било ком редоследу се свима, и изгледа
као неколико имена се понављају.
Оно што ми желимо је списак јединствених имена по абецедном
поретка, сачувана у фајл под именом финал.ткт.
Могли бисмо, наравно, написати Ц програм да то уради за нас.
Али то ће се непотребно
комплекс прилично брзо.
Хајде да уместо тога користе цеви и неких Буилт-ин-тоолс да реши
овај проблем.
>> Прва ствар коју треба да урадите је да чита студентс.ткт датотеке.
Мачка команда ће учинити управо то.
То ће прочитати у одређеном фајлу и пишу
њен садржај на стдоут.
Након што смо прочитали текст фајл, ми ћемо
Желим да сортирате имена.
Врсту команда може да ради за нас.
Сортирање ће резултовати линију испоручени преко стдин на стдоут
у сортираном редоследу.
У циљу снабдевања садржаја студентс.ткт на
СОРТ је стдин, могли бисмо да користимо лулу да комбинују мачку и сортирање.
Тако да може да извршава мачке студентс.ткт | врсту и
притисните Ентер.
А сада, видимо садржај студентс.ткт у
абецедном реду.
>> Дакле, хајде да додамо још једну команду -
уник, односно јединствени -
нашем плану.
Као што можете погодити, Уник, када испоручује сортирани низ
линија преко стдин ће резултовати јединствене линије.
Дакле, сада имамо мачке студентс.ткт
| Сорт | уник.
Коначно, можемо сачувати излаз гасовода до
датотека путем мачијег студентс.ткт | сорт | Уник
> Финал.ткт.
Дакле, ако смо отворили финал.ткт, имамо управо оно што смо били
тражите:
списак јединствених имена по абецедном реду,
чувају у текстуалном фајлу.
Узгред, ми смо такође могао да каже врста <
студентс.ткт | уник> финал.ткт да уради управо
иста ствар, користећи сваки од оператера које смо видели у
овај видео.
>> Моје име је Томи, а ово је ЦС50.