1 00:00:07,060 --> 00:00:08,420 [Powered by Google Translate] ТОММИ: У овом видеу, ми ћемо научити о 2 00:00:08,420 --> 00:00:10,140 преусмјеравање и цеви. 3 00:00:10,140 --> 00:00:12,780 До сада смо користили функције као што су принтф да 4 00:00:12,780 --> 00:00:15,590 излазне податке на терминалу и функције као што су ГетСтринг 5 00:00:15,590 --> 00:00:17,520 да омогући кориснику да обезбеди улаз на наше 6 00:00:17,520 --> 00:00:19,490 Програм помоћу тастатуре. 7 00:00:19,490 --> 00:00:21,880 Идемо брзо да погледамо програм који добија линију 8 00:00:21,880 --> 00:00:25,960 улаз од корисника, а затим га исписује. 9 00:00:25,960 --> 00:00:28,990 >> На линији 7, ми навело корисника за ниске, а 10 00:00:28,990 --> 00:00:31,680 затим на линији 8, ми смо га штампа назад. 11 00:00:31,680 --> 00:00:35,220 Хајде да компајлирати и покренути наш програм. 12 00:00:35,220 --> 00:00:35,900 Сјајно. 13 00:00:35,900 --> 00:00:37,620 Низ смо дали је поновио назад 14 00:00:37,620 --> 00:00:39,170 нам на терминалу. 15 00:00:39,170 --> 00:00:42,110 То се десило зато што је функција принтф написао свом 16 00:00:42,110 --> 00:00:46,220 поток зове стандардна напоље, или с-т-д-оут. 17 00:00:46,220 --> 00:00:49,230 Када се нешто написано у стдоут, то је по дефаулту 18 00:00:49,230 --> 00:00:51,110 приказује терминала. 19 00:00:51,110 --> 00:00:53,720 >> Тако да је све лепо и добро, али шта ако, уместо да је једноставно 20 00:00:53,720 --> 00:00:57,700 приказује стринг, хтели смо да га сачувате у датотеци? 21 00:00:57,700 --> 00:01:00,470 На пример, можда ћемо желети да се сетим тачно шта наше 22 00:01:00,470 --> 00:01:04,450 Програм је, када смо му дали касније одређени улаз. 23 00:01:04,450 --> 00:01:07,270 Један приступ би био да се то уради у нашем Ц програма, користећи 24 00:01:07,270 --> 00:01:09,680 неке посебне функције за писање у фајлове које ћемо 25 00:01:09,680 --> 00:01:11,270 види у другом видеу. 26 00:01:11,270 --> 00:01:13,260 Чак лакше, мада би се некако 27 00:01:13,260 --> 00:01:16,090 преусмеравање стдоут у датотеку. 28 00:01:16,090 --> 00:01:19,780 На тај начин, када иф пише у стдоут, садржај ће 29 00:01:19,780 --> 00:01:21,720 бити написан у датотеци него 30 00:01:21,720 --> 00:01:23,410 приказује терминала. 31 00:01:23,410 --> 00:01:26,690 Можемо да урадимо управо то додавањем веће од знак, а затим 32 00:01:26,690 --> 00:01:30,820 по имену датотеке, на команду користимо да изврши наш програм. 33 00:01:30,820 --> 00:01:34,730 >> Дакле, уместо да једноставно извршавање / редирецт, ми. Да 34 00:01:34,730 --> 00:01:38,880 рун / преусмеравање. следи већи од знака, а затим 35 00:01:38,880 --> 00:01:41,530 фајла, као филе.ткт. 36 00:01:41,530 --> 00:01:44,290 Хајде да видимо шта се дешава. 37 00:01:44,290 --> 00:01:45,130 ОК. 38 00:01:45,130 --> 00:01:48,470 Приметите да овај пут, ништа није приказана на терминалу, 39 00:01:48,470 --> 00:01:50,290 али нисмо мењали садржај нашег 40 00:01:50,290 --> 00:01:52,040 Ц програм на све. 41 00:01:52,040 --> 00:01:56,090 Хајдемо сада испитати садржај овог директоријума са лс. 42 00:01:56,090 --> 00:01:56,630 >> У реду. 43 00:01:56,630 --> 00:02:00,840 Ми сада имамо нову датотеку у нашем каталогу зове филе.ткт, 44 00:02:00,840 --> 00:02:03,640 што је назив фајла смо добили када смо наишли нашу 45 00:02:03,640 --> 00:02:05,050 Преусмеравање програм. 46 00:02:05,050 --> 00:02:08,020 Хајде да отворимо филе.ткт. 47 00:02:08,020 --> 00:02:11,840 И овде, можемо видети да је стдоут од преусмеравање је 48 00:02:11,840 --> 00:02:15,550 уписани у датотеку под називом филе.ткт. 49 00:02:15,550 --> 00:02:18,470 Дакле, хајде да поново претходну команду, али снабдевање 50 00:02:18,470 --> 00:02:20,075 различита улаза овај пут. 51 00:02:25,140 --> 00:02:25,900 Ок. 52 00:02:25,900 --> 00:02:28,205 Узмимо сада погледамо филе.ткт. 53 00:02:31,070 --> 00:02:34,580 >> Овде можемо видети да је датотека била преписана, тако да је наш 54 00:02:34,580 --> 00:02:37,120 оригинални улазни није више тамо. 55 00:02:37,120 --> 00:02:40,280 Ако уместо тога желите да додате у овај фајл, стављајући нови 56 00:02:40,280 --> 00:02:43,600 улаз испод постојећих садржаја фајла, можемо 57 00:02:43,600 --> 00:02:46,800 користити две веће од знакова уместо само једног. 58 00:02:46,800 --> 00:02:48,050 Хајде да пробамо то. 59 00:02:52,160 --> 00:02:57,910 Сада, ако смо отворили филе.ткт опет, можемо видети обе наше 60 00:02:57,910 --> 00:02:59,580 улазних линија. 61 00:02:59,580 --> 00:03:02,180 У неким случајевима, можда ћемо желети да одбаците било 62 00:03:02,180 --> 00:03:03,850 Излаз нашег програма. 63 00:03:03,850 --> 00:03:06,450 Уместо писања излаз у датотеку, а затим брисање 64 00:03:06,450 --> 00:03:09,310 фајл када смо завршили са тим, можемо да пишемо у специјалне 65 00:03:09,310 --> 00:03:12,360 фајл који се зове / дев / нулл. 66 00:03:12,360 --> 00:03:15,160 Када се било шта написано / дев/нулл-- 67 00:03:15,160 --> 00:03:16,960 или само девнулл за кратко - 68 00:03:16,960 --> 00:03:18,950 аутоматски се одбацује. 69 00:03:18,950 --> 00:03:23,290 Дакле, мислим девнулл као црна рупа за ваше податке. 70 00:03:23,290 --> 00:03:26,070 >> Дакле, сада смо видели како је већа него знак да преусмери 71 00:03:26,070 --> 00:03:29,610 стдоут, хајде да видимо како можемо преусмерити стандард - 72 00:03:29,610 --> 00:03:31,250 или с-т-д-у - 73 00:03:31,250 --> 00:03:33,550 аналог излаз. 74 00:03:33,550 --> 00:03:36,010 Док функционише као иф писати потока под називом 75 00:03:36,010 --> 00:03:40,500 стдоут, ГетСтринг и сличне функције чита из потока 76 00:03:40,500 --> 00:03:43,770 зове стдин, који по дефаулту, је ток 77 00:03:43,770 --> 00:03:46,290 карактера откуцан на тастатури. 78 00:03:46,290 --> 00:03:50,010 Можемо преусмерити стдин користећи мање него знак, а затим 79 00:03:50,010 --> 00:03:51,370 од фајла. 80 00:03:51,370 --> 00:03:54,000 Сада, уместо што је навело корисника за унос у хотелу 81 00:03:54,000 --> 00:03:57,870 терминала, програм ће отворити фајл који смо назначили и коришћење 82 00:03:57,870 --> 00:03:59,790 њени редови као инпут. 83 00:03:59,790 --> 00:04:02,620 >> Хајде да видимо шта се дешава. 84 00:04:02,620 --> 00:04:03,280 Сјајно. 85 00:04:03,280 --> 00:04:07,590 Прва линија филе.ткт је штампан на терминалу 86 00:04:07,590 --> 00:04:10,160 зато зовемо ГетСтринг једном. 87 00:04:10,160 --> 00:04:13,170 Ако смо имали још један позив да се ГетСтринг у нашем програму, 88 00:04:13,170 --> 00:04:16,149 Следећи ред филе.ткт би да се користи као 89 00:04:16,149 --> 00:04:17,990 Улаз на тај позив. 90 00:04:17,990 --> 00:04:21,050 Опет, нисмо мењали наш Ц програм. 91 00:04:21,050 --> 00:04:23,620 Ми само мењамо како смо га покренули. 92 00:04:23,620 --> 00:04:27,080 И такође запамтите, нисмо преусмерени стдоут овај пут, 93 00:04:27,080 --> 00:04:28,970 тако да излаз програма је и даље 94 00:04:28,970 --> 00:04:31,040 приказују на терминалу. 95 00:04:31,040 --> 00:04:33,500 Можемо, наравно, преусмеравају како стдин 96 00:04:33,500 --> 00:04:37,320 и стдоут овако. 97 00:04:37,320 --> 00:04:43,550 Сада, филе2.ткт садржи прву линију филе.ткт. 98 00:04:43,550 --> 00:04:46,140 >> Дакле, коришћењем ових оператора, ми смо били у стању да чита и 99 00:04:46,140 --> 00:04:48,130 пишем из текстуалних фајлова. 100 00:04:48,130 --> 00:04:51,890 Сада, хајде да видимо како можемо да користимо излаз једног програма као 101 00:04:51,890 --> 00:04:54,710 улаз за други програм. 102 00:04:54,710 --> 00:04:56,650 Дакле, овде је још један једноставан Ц програм на који сам 103 00:04:56,650 --> 00:05:00,190 овде се зове хелло.ц. 104 00:05:00,190 --> 00:05:02,617 Као што можете да видите, то једноставно излази "Здраво 105 00:05:02,617 --> 00:05:04,430 тамо "кориснику. 106 00:05:04,430 --> 00:05:08,890 Ако желим преусмерити да се користи као улаз излаз здраво - 107 00:05:08,890 --> 00:05:10,190 други програм - 108 00:05:10,190 --> 00:05:13,920 Први пут сам могао преусмерити на стдоут здраво фајл под називом 109 00:05:13,920 --> 00:05:18,960 инпут.ткт, затим преусмерити стдин за преусмеравање на тај исти 110 00:05:18,960 --> 00:05:21,190 филе - инпут.ткт. 111 00:05:21,190 --> 00:05:26,730 Тако да могу да урадим / здраво> инпут.ткт.. 112 00:05:26,730 --> 00:05:28,810 Притисните Ентер да бисте извршили ово. 113 00:05:28,810 --> 00:05:31,910 Праћен. / Преусмеравање < 114 00:05:31,910 --> 00:05:35,270 инпут.ткт и извршава то. 115 00:05:35,270 --> 00:05:38,290 Дакле, можемо скратити ово мало са зарезом, који омогућава 116 00:05:38,290 --> 00:05:41,360 да покрене две или више команде на истој линији. 117 00:05:41,360 --> 00:05:47,920 Тако да могу да кажем. / Здраво> инпут.ткт, тачка и зарез, 118 00:05:47,920 --> 00:05:50,580 / Преусмеравање <инпут.ткт.. 119 00:05:53,850 --> 00:05:56,740 >> Тако то функционише, али је и даље осећа прилично неелегантан. 120 00:05:56,740 --> 00:05:59,530 Мислим, да ли нам је заиста потребан тај посредничку текстуалну датотеку која је 121 00:05:59,530 --> 00:06:02,520 Више није потребно после преусмеравање трчања? 122 00:06:02,520 --> 00:06:05,780 Срећом, можемо избећи ову додатну текстуалну датотеку користећи оно што је 123 00:06:05,780 --> 00:06:07,220 зове цев. 124 00:06:07,220 --> 00:06:13,740 Ако кажем, / здраво |.. / Преусмеравање, онда стдоут у 125 00:06:13,740 --> 00:06:15,310 програм на лево - 126 00:06:15,310 --> 00:06:16,740 у овом случају, здраво - 127 00:06:16,740 --> 00:06:18,970 ће се користити као стандардни улаз за 128 00:06:18,970 --> 00:06:20,370 Програм на десној страни. 129 00:06:20,370 --> 00:06:24,850 У овом случају, преусмеравају. Дакле, хајде да ово. 130 00:06:24,850 --> 00:06:25,930 >> Ту смо. 131 00:06:25,930 --> 00:06:30,080 Можемо видети да излаз Хелло је коришћен као улаз 132 00:06:30,080 --> 00:06:31,520 за преусмеравање. 133 00:06:31,520 --> 00:06:34,890 До низање команде заједно користећи цеви, формирају се шта је 134 00:06:34,890 --> 00:06:38,120 зове гасовод, јер је наш излаз је у суштини креће 135 00:06:38,120 --> 00:06:40,590 преко низа команди. 136 00:06:40,590 --> 00:06:43,570 Користећи цеви, можемо да урадимо неке кул ствари, без потребе да 137 00:06:43,570 --> 00:06:45,870 напише било који код уопште. 138 00:06:45,870 --> 00:06:48,760 На пример, рецимо да желимо да знамо колико су датотеке 139 00:06:48,760 --> 00:06:50,630 унутар овог директоријума. 140 00:06:50,630 --> 00:06:55,200 Коришћење цеви, можемо комбиновати лс команду са ВЦ - 141 00:06:55,200 --> 00:06:56,460 или вордцоунт - 142 00:06:56,460 --> 00:06:57,850 команду. 143 00:06:57,850 --> 00:07:02,230 Лс ће резултовати сваки фајл у директоријуму на стдоут, и 144 00:07:02,230 --> 00:07:08,040 вц ће нам рећи колико је линија добили су на њега преко стдин. 145 00:07:08,040 --> 00:07:12,440 Дакле, ако кажемо лс | вц-л - 146 00:07:12,440 --> 00:07:16,800 снабдевање-л заставу вц да кажем да рачунају линије - 147 00:07:16,800 --> 00:07:19,260 можемо тачно видети колико су датотеке 148 00:07:19,260 --> 00:07:21,940 у текућем директоријуму. 149 00:07:21,940 --> 00:07:24,570 >> Дакле, хајде да погледамо још један пример. 150 00:07:24,570 --> 00:07:27,740 Овде имате фајл под називом студентс.ткт, 151 00:07:27,740 --> 00:07:29,600 са листом имена. 152 00:07:29,600 --> 00:07:32,730 Међутим, ова имена нису у било ком редоследу се свима, и изгледа 153 00:07:32,730 --> 00:07:34,850 као неколико имена се понављају. 154 00:07:34,850 --> 00:07:38,510 Оно што ми желимо је списак јединствених имена по абецедном 155 00:07:38,510 --> 00:07:42,550 поретка, сачувана у фајл под именом финал.ткт. 156 00:07:42,550 --> 00:07:45,210 Могли бисмо, наравно, написати Ц програм да то уради за нас. 157 00:07:45,210 --> 00:07:46,560 Али то ће се непотребно 158 00:07:46,560 --> 00:07:48,560 комплекс прилично брзо. 159 00:07:48,560 --> 00:07:51,740 Хајде да уместо тога користе цеви и неких Буилт-ин-тоолс да реши 160 00:07:51,740 --> 00:07:53,300 овај проблем. 161 00:07:53,300 --> 00:07:57,760 >> Прва ствар коју треба да урадите је да чита студентс.ткт датотеке. 162 00:07:57,760 --> 00:08:00,530 Мачка команда ће учинити управо то. 163 00:08:00,530 --> 00:08:03,230 То ће прочитати у одређеном фајлу и пишу 164 00:08:03,230 --> 00:08:05,750 њен садржај на стдоут. 165 00:08:05,750 --> 00:08:07,570 Након што смо прочитали текст фајл, ми ћемо 166 00:08:07,570 --> 00:08:09,490 Желим да сортирате имена. 167 00:08:09,490 --> 00:08:12,510 Врсту команда може да ради за нас. 168 00:08:12,510 --> 00:08:16,830 Сортирање ће резултовати линију испоручени преко стдин на стдоут 169 00:08:16,830 --> 00:08:19,310 у сортираном редоследу. 170 00:08:19,310 --> 00:08:23,450 У циљу снабдевања садржаја студентс.ткт на 171 00:08:23,450 --> 00:08:29,600 СОРТ је стдин, могли бисмо да користимо лулу да комбинују мачку и сортирање. 172 00:08:29,600 --> 00:08:34,440 Тако да може да извршава мачке студентс.ткт | врсту и 173 00:08:34,440 --> 00:08:35,640 притисните Ентер. 174 00:08:35,640 --> 00:08:39,309 А сада, видимо садржај студентс.ткт у 175 00:08:39,309 --> 00:08:40,909 абецедном реду. 176 00:08:40,909 --> 00:08:42,860 >> Дакле, хајде да додамо још једну команду - 177 00:08:42,860 --> 00:08:44,730 уник, односно јединствени - 178 00:08:44,730 --> 00:08:46,230 нашем плану. 179 00:08:46,230 --> 00:08:49,810 Као што можете погодити, Уник, када испоручује сортирани низ 180 00:08:49,810 --> 00:08:53,650 линија преко стдин ће резултовати јединствене линије. 181 00:08:53,650 --> 00:08:56,910 Дакле, сада имамо мачке студентс.ткт 182 00:08:56,910 --> 00:09:00,040 | Сорт | уник. 183 00:09:00,040 --> 00:09:03,330 Коначно, можемо сачувати излаз гасовода до 184 00:09:03,330 --> 00:09:09,090 датотека путем мачијег студентс.ткт | сорт | Уник 185 00:09:09,090 --> 00:09:12,440 > Финал.ткт. 186 00:09:12,440 --> 00:09:16,260 Дакле, ако смо отворили финал.ткт, имамо управо оно што смо били 187 00:09:16,260 --> 00:09:17,270 тражите: 188 00:09:17,270 --> 00:09:20,180 списак јединствених имена по абецедном реду, 189 00:09:20,180 --> 00:09:22,150 чувају у текстуалном фајлу. 190 00:09:22,150 --> 00:09:26,020 Узгред, ми смо такође могао да каже врста < 191 00:09:26,020 --> 00:09:32,290 студентс.ткт | уник> финал.ткт да уради управо 192 00:09:32,290 --> 00:09:35,400 иста ствар, користећи сваки од оператера које смо видели у 193 00:09:35,400 --> 00:09:36,580 овај видео. 194 00:09:36,580 --> 00:09:39,540 >> Моје име је Томи, а ово је ЦС50.