[Powered by Google Translate] TOMMY: Во ова видео, ќе учат за
пренасочување и цевки.
Досега, ние сме биле користење на функции како printf да
излез на податоци до терминалот и функции како GetString
да им се овозможи на корисникот да се обезбеди влез на нашите
програма со користење на тастатура.
Ајде брзо ги разгледаме во една програма која добива линија на
влез од корисникот, а потоа излези.
>> On-line 7, ние се прашува корисникот за стринг, и
потоа на алинеја 8, ние сме тоа печатење назад.
Да компајлирајте и извршете нашата програма.
Велики.
Низата ние се предвидени можеше да се слушне назад
за нас во терминал.
Ова се случи бидејќи printf функцијата напиша на
поток нарекува стандарден излез, или е-т-d-надвор.
Кога нешто е напишано во stdout, тоа е стандардно
екранот од страна на терминалот.
>> Па тоа е добро и добро, но што ако, наместо едноставно да
прикажување на стринг, сакавме да го зачувате во датотека?
На пример, ние можеби ќе сакате да се запамети токму она што нашите
програма не кога ние го даде одредена влез подоцна.
Еден пристап би бил да го направите ова во нашата Ц програма, користејќи
некои посебни функции за пишување на датотеки кои ќе
види во друг видео.
Дури и полесно, сепак, ќе биде да се некако
пренасочување stdout во датотека.
На тој начин, кога printf пишува до stdout, содржината ќе
да се запише датотека наместо
екранот од страна на терминалот.
Ние можеме да го прават токму тоа со додавање на поголема-од знак, по што следи
од името на датотеката, на командната ние ги користиме за да се изврши нашата програма.
>> Така, наместо едноставно извршување. / Пренасочување, можеме да
се кандидира. / пренасочување, проследено со поголема од знак, проследено со
името на датотеката, како file.txt.
Ајде да видиме што се случува.
ОК.
Забележете дека овој пат, ништо не беше прикажана на терминалот,
но ние не се менува содржината на нашите
Ц програма на сите.
Ајде сега испита содржината на овој директориум со ls.
>> Во ред.
Сега имаме нова датотека во нашите директориум наречен file.txt,
што е името на датотеката ние испорачува кога ние трчаше нашиот
Пренасочување програма.
Да се ​​отвори file.txt.
И тука, можеме да видиме дека stdout од пренасочување беше
напишани на датотека наречена file.txt.
Значи, да се кандидира на претходната команда повторно, но обезбедувањето на
различни влезни тоа време.
Во ред.
Ајде да ги разгледаме во file.txt сега.
>> Можеме да видиме тука дека датотеката е препишани, така и нашата
оригиналниот влез не е таму веќе.
Ако ние наместо да сакате да го додадете на оваа датотека, ставање на ново
влез под постоечките содржината на датотеката, можеме да
користат две поголема-од знаци наместо на само еден.
Да се ​​обидеме тоа.
Сега, ако ги отвориме file.txt повторно, можеме да видиме и од нашите
влезни линии.
Во некои случаи, можеби ќе сакате да ги отфрли сите
производство на нашата програма.
Наместо да пишувате на излез на датотека, а потоа бришење
на датотеката кога ќе завршиш со тоа, ние може да напише на посебни
фајл наречен / dev / null.
Кога нешто е напишана / dev/null--
или само devnull за кратко -
се автоматски избришани.
Значи мислам на devnull како црна дупка за вашите податоци.
>> Па сега што сум го видел како поголем од знакот може да се пренасочи
stdout, ајде да видиме како можеме да пренасочи стандард во -
или С-Т-d-во -
аналоген на stdout.
Додека функции како printf пишете на потокот наречен
stdout, GetString и слични функции чита од поток
наречен stdin, која, по правило, е поток на
карактери напишани на тастатурата.
Ние може да се пренасочи stdin користење на помалку од знак, по што следи
од името на датотеката.
Сега, наместо да се прашува корисникот за внесување на
терминал, програмата ќе ја отворам датотеката ние наведени и употреба
своите редови како влез.
>> Ајде да видиме што се случува.
Велики.
На првата линија на file.txt е отпечатена во терминал
затоа што ние сме повикувајќи GetString еднаш.
Ако имавме уште еден повик да GetString во нашата програма,
следната линија на file.txt ќе се користи како
внесување на тој повик.
Повторно, не сме пат е изменета нашата C програма на сите.
Ние сме само менување на тоа како ние ја стартувате.
И исто така се сеќавам, не сме пренасочени stdout тоа време,
па излез на програмата се уште
прикажани во терминал.
Ние може, се разбира, пренасочување и stdin
и stdout се допаѓа ова.
Сега, file2.txt содржи првата линија на file.txt.
>> Значи, со користење на овие оператори, ние сме во можност да чита и
пишува од текстуални датотеки.
Сега, ајде да видиме како можеме да го користиме излез на една програма како
внесување на друга програма.
Значи тука е уште една едноставна програма на C јас
се тука наречен hello.c.
Како што можете да видите, ова едноставно излези "Здраво
таму! "до корисникот.
Ако сакам пренасочи да се користи како влез излез на здраво -
друга програма -
Јас прв пат може да се пренасочи на stdout на здраво на датотека наречена
input.txt, а потоа се сврти stdin на пренасочува кон истата
датотека - input.txt.
Значи можам да направам. / Здраво> input.txt.
Притиснете Enter за да се изврши оваа.
Проследено со. / Пренасочи <
input.txt, и изврши тоа.
Па ние може да го скрати овој малку со точка-запирка, што овозможува
ни да се кандидира две или повеќе команди на иста линија.
Па можам да кажам. / Здраво> input.txt, запирка,
. / Пренасочи <input.txt.
>> Значи ова работи, но сепак се чувствува прилично без вкус.
Мислам, дали навистина треба оваа посредник текстуална датотека што е
не е потребно по пренасочување работи?
За среќа, можеме да се избегне овој дополнителен текст датотека со она што е
нарекува цевка.
Ако кажам, / здраво. |. / Пренасочување, тогаш stdout на
на програмата на левата -
во овој случај, здраво -
ќе се користи како стандарден влез за
Програмата на правото.
Во овој случај, пренасочување. Па ајде да ја извршите оваа.
>> Таму ќе одиме.
Можеме да видиме дека излезот на здраво се користи како влез
за пренасочување.
Од страна stringing команди заедно користејќи цевки, ние форма што е
нарекува гасоводот, бидејќи нашето производство е во суштина се движи
преку низа на команди.
Користење на цевки, можеме да направиме некои кул работи без потреба да
напишете било код на сите.
На пример, да речеме ние сакаме да знаеме колку датотеки се
внатрешноста на овој директориум.
Користење на цевка, ние може да се комбинираат ls команда со WC -
или wordcount -
команда.
Ls ќе излез секоја датотека во директориумот на stdout и
WC ќе ни каже колку линии беа доделени тоа преку stdin.
Значи, ако се каже ls | WC-L -
снабдување на-l знаме WC да го кажам да се избројат линии -
можеме да видиме точно колку датотеки се
во тековниот директориум.
>> Па ајде да ги разгледаме во уште еден пример.
Имам тука фајл наречен students.txt,
со листа на имиња.
Сепак, овие имиња не се во секој ред сето тоа, и тоа изгледа
како неколку имиња се повтори.
Она што сакаме е листа на единствени имиња по азбучен
цел, снимени на датотека наречена final.txt.
Ние, се разбира, напише програма C до стори тоа за нас.
Но, тоа се случува да се добие непотребно
комплекс прилично брзо.
Ајде наместо тоа користат цевки и некои вградени во алатки за решавање на
овој проблем.
>> Првото нешто што ние треба да направите е да ја прочитате датотеката students.txt.
Мачката команда ќе го стори токму тоа.
Тоа ќе прочитате во наведената датотека и напишете
неговата содржина на stdout.
Откако ќе го прочитате текстот датотека, ние ќе
сакате да ги сортирате имиња.
Вид команда може да се справи со овој за нас.
Сортирај ќе излез линија обезбедени преку stdin до stdout
во подредени цел.
Со цел да обезбеди на содржината на students.txt да
stdin вид, ние може да се користи цевка за да се комбинираат мачка и вид.
Па јас може да се изврши мачка students.txt | сортирање и
притиснете Enter.
И сега, ние ја видите содржината на students.txt во
азбучен ред.
>> Значи, да додадете друга команда -
Uniq, или уникатен -
на нашите гасоводот.
Како што може да се погоди, Uniq, кога се снабдува сортирани секвенца на
линии преку stdin, ќе излез уникатен линии.
Така, сега имаме мачка students.txt
| Подреди | Uniq.
Конечно, ние може да го спаси излез од гасоводот до
датотека преку мачка students.txt | Подреди | Uniq
> Final.txt.
Значи, ако ние се отвори final.txt, имаме токму она што беа
барате:
листа на единствени имиња по азбучен ред,
зачувани во текстуална датотека.
Патем, ние исто така може да се рече вид <
students.txt | Uniq> final.txt да го направите токму
истото, со користење на секој од операторите видовме во
оваа видео.
>> Моето име е Томи, и ова е CS50.