1 00:00:07,060 --> 00:00:08,420 [Powered by Google Translate] TOMMY: В това видео, ние ще научите за 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 извеждане на данни към терминала и функции като GetString 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 поток наречен стандартен, или S-т-г-. 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 Един подход би бил да се направи това в нашата програма C, като се използва 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 име, като file.txt. 36 00:01:41,530 --> 00:01:44,290 Нека видим какво ще стане. 37 00:01:44,290 --> 00:01:45,130 OK. 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 Нека сега разгледаме съдържанието на тази директория с LS. 42 00:01:56,090 --> 00:01:56,630 >> Добре. 43 00:01:56,630 --> 00:02:00,840 Сега имаме нов файл в нашия каталог, наречен file.txt 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 Нека отворим file.txt. 47 00:02:08,020 --> 00:02:11,840 И тук, можем да видим, че стандартния изход от пренасочване 48 00:02:11,840 --> 00:02:15,550 писмено на файл, наречен file.txt. 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 Нека да погледнем в file.txt сега. 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 Сега, ако отворим отново file.txt, можем да видим и на двама ни 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 файл, наречен / Dev / нула. 66 00:03:12,360 --> 00:03:15,160 Когато нещо е писано / dev/null-- 67 00:03:15,160 --> 00:03:16,960 или просто devnull за кратко 68 00:03:16,960 --> 00:03:18,950 той автоматично се изхвърли. 69 00:03:18,950 --> 00:03:23,290 Така че мисля devnull като черна дупка за вашите данни. 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 или S-т-г-в 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 стандартния изход, GetString и други подобни функции, които се четат от потока 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 На първия ред на file.txt е отпечатан до терминала 86 00:04:07,590 --> 00:04:10,160 защото ние се обаждате GetString веднъж. 87 00:04:10,160 --> 00:04:13,170 Ако имахме друг разговор, за да GetString в нашата програма, 88 00:04:13,170 --> 00:04:16,149 следващия ред на file.txt би са били използвани като 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 Сега, file2.txt съдържа първата линия на file.txt. 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 тук се наричат ​​hello.c. 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 input.txt, а след това пренасочване на стандартния вход на пренасочи към същата 110 00:05:18,960 --> 00:05:21,190 файл - input.txt. 111 00:05:21,190 --> 00:05:26,730 Така че мога да направя. / Здравей> input.txt. 112 00:05:26,730 --> 00:05:28,810 Натиснете Enter, за да се изпълни това. 113 00:05:28,810 --> 00:05:31,910 Следван от / пренасочващ < 114 00:05:31,910 --> 00:05:35,270 input.txt и изпълнение. 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 Затова мога да кажа, / здравей> input.txt, точка и запетая, 118 00:05:47,920 --> 00:05:50,580 / Пренасочващ 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 или wordcount - 142 00:06:56,460 --> 00:06:57,850 команда. 143 00:06:57,850 --> 00:07:02,230 Ls ще изведе всеки файл в директорията на стандартния изход, и 144 00:07:02,230 --> 00:07:08,040 тоалетна ще ни каже колко линии бяха дадени чрез стандартния вход. 145 00:07:08,040 --> 00:07:12,440 Така че, ако ние казваме ли | WC-л - 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 Тук имам файл, наречен students.txt, 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 ред, записва в файл, наречен final.txt. 156 00:07:42,550 --> 00:07:45,210 Ние, разбира се, може да се напише програма на C, за да направи това за нас. 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 >> Първото нещо, което трябва да направите, е прочетете students.txt на файла. 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 С цел да се предоставят на съдържанието на students.txt 171 00:08:23,450 --> 00:08:29,600 стандартния вход вид, бихме могли да използваме тръба да комбинирате котка и сортиране. 172 00:08:29,600 --> 00:08:34,440 Така че може да изпълни котка students.txt | вид и 173 00:08:34,440 --> 00:08:35,640 натиснете Enter. 174 00:08:35,640 --> 00:08:39,309 И сега, виждате съдържанието на students.txt в 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 Uniq или уникален - 178 00:08:44,730 --> 00:08:46,230 в нашия тръбопровод. 179 00:08:46,230 --> 00:08:49,810 Както можете да предположите, Uniq, когато е предоставила подредени поредица от 180 00:08:49,810 --> 00:08:53,650 линии през стандартния вход ще изведе уникални линии. 181 00:08:53,650 --> 00:08:56,910 Така че сега имаме котка students.txt 182 00:08:56,910 --> 00:09:00,040 | Вид | Uniq. 183 00:09:00,040 --> 00:09:03,330 И накрая, можем да спестим на изхода на тръбопровода за 184 00:09:03,330 --> 00:09:09,090 файл чрез котка students.txt | вид | Uniq 185 00:09:09,090 --> 00:09:12,440 > Final.txt. 186 00:09:12,440 --> 00:09:16,260 Така че, ако се отворим final.txt, ние имаме точно това, което са 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 students.txt | Uniq> final.txt да се направи точно 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 >> Моето име е Томи, и това е CS50.