1 00:00:07,060 --> 00:00:08,420 [Powered by Google Translate] Tommy: Në këtë video, ne do të mësojnë në lidhje 2 00:00:08,420 --> 00:00:10,140 Përcjellin dhe tuba. 3 00:00:10,140 --> 00:00:12,780 Deri tani, ne kemi qenë duke përdorur funksione si printf të 4 00:00:12,780 --> 00:00:15,590 Të dhënat e prodhimit në terminal dhe funksionet si getString 5 00:00:15,590 --> 00:00:17,520 për të lejuar përdoruesit për të siguruar të dhëna të tonë 6 00:00:17,520 --> 00:00:19,490 Programi i përdorur tastierën. 7 00:00:19,490 --> 00:00:21,880 Le të shpejt të marrë një sy në një program që merr një linjë të 8 00:00:21,880 --> 00:00:25,960 input nga përdoruesit dhe pastaj rezultatet atë. 9 00:00:25,960 --> 00:00:28,990 >> On line 7, ne jemi duke bërë që përdoruesit për një varg, dhe 10 00:00:28,990 --> 00:00:31,680 pastaj në linjë 8, ne jemi shtypjen atë nga mbrapa. 11 00:00:31,680 --> 00:00:35,220 Le të hartojnë dhe të drejtuar programin tonë. 12 00:00:35,220 --> 00:00:35,900 Madhe. 13 00:00:35,900 --> 00:00:37,620 Vargu kemi dhënë u bëri jehonë prapa 14 00:00:37,620 --> 00:00:39,170 për ne në terminalin e. 15 00:00:39,170 --> 00:00:42,110 Kjo ka ndodhur për shkak se funksioni printf shkroi në një 16 00:00:42,110 --> 00:00:46,220 rrymë quajtur nga standarde, ose s-T-D-jashtë. 17 00:00:46,220 --> 00:00:49,230 Kur diçka është shkruar për stdout, kjo është nga default 18 00:00:49,230 --> 00:00:51,110 shfaqet nga terminali. 19 00:00:51,110 --> 00:00:53,720 >> Pra, kjo është e gjitha mirë dhe të mirë, por çka nëse, në vend të thjesht 20 00:00:53,720 --> 00:00:57,700 shfaqur string, ne kemi kërkuar për të shpëtuar atë në një skedar? 21 00:00:57,700 --> 00:01:00,470 Për shembull, ne mund të dëshironi të mbani mend saktësisht se çfarë tonë 22 00:01:00,470 --> 00:01:04,450 Programi i bëri kur ne ia dha një kontribut të veçantë më vonë. 23 00:01:04,450 --> 00:01:07,270 Një qasje e tillë do të jetë për të bërë këtë në C programin tonë, duke përdorur 24 00:01:07,270 --> 00:01:09,680 disa funksione të veçanta për të shkruar për të dosjeve që ne do të 25 00:01:09,680 --> 00:01:11,270 shohim në një tjetër video. 26 00:01:11,270 --> 00:01:13,260 Edhe më e lehtë, edhe pse, do të jetë në një farë mënyre 27 00:01:13,260 --> 00:01:16,090 syswrite përcjellim në një skedar. 28 00:01:16,090 --> 00:01:19,780 Në këtë mënyrë, kur shkruan për printf stdout, përmbajtja do të 29 00:01:19,780 --> 00:01:21,720 të jetë e shkruar në një skedar në vend se 30 00:01:21,720 --> 00:01:23,410 shfaqet nga terminali. 31 00:01:23,410 --> 00:01:26,690 Ne mund të bëjmë vetëm se duke shtuar një shenjë të madhe-se, e ndjekur 32 00:01:26,690 --> 00:01:30,820 nga një emër file, për komandën që ne përdorim për të ekzekutuar programin tonë. 33 00:01:30,820 --> 00:01:34,730 >> Pra, në vend se thjesht ekzekutimin. / Redirect, ne mund të 34 00:01:34,730 --> 00:01:38,880 drejtuar. / përcjellëse, e ndjekur nga një shenjë e madhe se, e ndjekur nga 35 00:01:38,880 --> 00:01:41,530 filename, si file.txt. 36 00:01:41,530 --> 00:01:44,290 Le të shohim se çfarë ndodh. 37 00:01:44,290 --> 00:01:45,130 OK. 38 00:01:45,130 --> 00:01:48,470 Vini re se këtë herë, asgjë nuk ishte shfaqur në terminalin, 39 00:01:48,470 --> 00:01:50,290 por ne nuk kemi modifikuar përmbajtjen e tona 40 00:01:50,290 --> 00:01:52,040 Programi C në të gjitha. 41 00:01:52,040 --> 00:01:56,090 Le të shqyrtojmë tani përmbajtjen e kësaj directory me ls. 42 00:01:56,090 --> 00:01:56,630 >> Dakord. 43 00:01:56,630 --> 00:02:00,840 Ne tani kemi një skedë të re në directory tonë të quajtur file.txt, 44 00:02:00,840 --> 00:02:03,640 i cili është emri i file kemi furnizuar, kur ne u tona 45 00:02:03,640 --> 00:02:05,050 Redirect program. 46 00:02:05,050 --> 00:02:08,020 Le të hapur file.txt. 47 00:02:08,020 --> 00:02:11,840 Dhe këtu, ne mund të shohim se Syswrite nga përcjellim ishte 48 00:02:11,840 --> 00:02:15,550 shkruar në dosjen e quajtur file.txt. 49 00:02:15,550 --> 00:02:18,470 Pra, le të drejtuar komandën e mëparshme përsëri, por të furnizuar një 50 00:02:18,470 --> 00:02:20,075 input ndryshe këtë herë. 51 00:02:25,140 --> 00:02:25,900 Rregull. 52 00:02:25,900 --> 00:02:28,205 Le të marrin një vështrim në file.txt tani. 53 00:02:31,070 --> 00:02:34,580 >> Ne mund të shohim këtu se dosja ka qenë overwritten, në mënyrë tona 54 00:02:34,580 --> 00:02:37,120 input origjinale nuk ekziston më. 55 00:02:37,120 --> 00:02:40,280 Në qoftë se ne duam të append në vend të këtij file, duke e re 56 00:02:40,280 --> 00:02:43,600 input poshtë përmbajtjen e dosjes ekzistuese, ne mund të 57 00:02:43,600 --> 00:02:46,800 përdorin dy të madhe-se shenjat në vend të vetëm një. 58 00:02:46,800 --> 00:02:48,050 Le të provoni këtë. 59 00:02:52,160 --> 00:02:57,910 Tani, në qoftë se ne hapim file.txt përsëri, ne mund të shohim të dy tonë 60 00:02:57,910 --> 00:02:59,580 Linjat e input. 61 00:02:59,580 --> 00:03:02,180 Në disa raste, ne mund të dëshironi të hidhni çdo 62 00:03:02,180 --> 00:03:03,850 Prodhimi i programit tonë. 63 00:03:03,850 --> 00:03:06,450 Në vend se të shkruarit e prodhimit në një skedar dhe pastaj fshirjes 64 00:03:06,450 --> 00:03:09,310 file kur ne jemi bërë me të, ne mund të shkruaj një të veçantë 65 00:03:09,310 --> 00:03:12,360 file i quajtur / dev / null. 66 00:03:12,360 --> 00:03:15,160 Kur çdo gjë është shkruar për të / dev/null-- 67 00:03:15,160 --> 00:03:16,960 ose thjesht devnull për të shkurtër - 68 00:03:16,960 --> 00:03:18,950 ajo është hedhur poshtë automatikisht. 69 00:03:18,950 --> 00:03:23,290 Pra, mendoj se e devnull si një vrimë të zezë për të dhënat tuaja. 70 00:03:23,290 --> 00:03:26,070 >> Deri tani kemi parë se si shenjë e madhe se mund të përcjellim 71 00:03:26,070 --> 00:03:29,610 Syswrite, le të shohim se si ne mund të përcjellim standarde në - 72 00:03:29,610 --> 00:03:31,250 ose S-t-D-në - 73 00:03:31,250 --> 00:03:33,550 analog i stdout. 74 00:03:33,550 --> 00:03:36,010 Ndërsa funksionet printf pëlqen të shkruaj në lumë quajtur 75 00:03:36,010 --> 00:03:40,500 , Syswrite getString dhe funksione të ngjashme të lexuar nga lumë 76 00:03:40,500 --> 00:03:43,770 STDIN quajtur, e cila, si parazgjedhje, është lumë i 77 00:03:43,770 --> 00:03:46,290 karaktere shtypur në tastierë. 78 00:03:46,290 --> 00:03:50,010 Ne mund të përcjellim STDIN duke përdorur më pak se shenjë, të ndjekur 79 00:03:50,010 --> 00:03:51,370 nga një filename. 80 00:03:51,370 --> 00:03:54,000 Tani, në vend se duke bërë përdorues për kontributin në nivelet 81 00:03:54,000 --> 00:03:57,870 terminali, një program do të hapë dosjen ne specifikuar dhe të përdorni 82 00:03:57,870 --> 00:03:59,790 linjat e saj si input. 83 00:03:59,790 --> 00:04:02,620 >> Le të shohim se çfarë ndodh. 84 00:04:02,620 --> 00:04:03,280 Madhe. 85 00:04:03,280 --> 00:04:07,590 Linja e parë e file.txt është shtypur në terminalin 86 00:04:07,590 --> 00:04:10,160 sepse ne jemi duke bërë thirrje getString herë. 87 00:04:10,160 --> 00:04:13,170 Nëse do të kishim një tjetër thirrje për getString në programin tonë, 88 00:04:13,170 --> 00:04:16,149 Linja tjetër e file.txt do të kishte qenë përdorur si 89 00:04:16,149 --> 00:04:17,990 input asaj thirrjeje. 90 00:04:17,990 --> 00:04:21,050 Përsëri, ne nuk kemi modifikuar programin tonë C në të gjitha. 91 00:04:21,050 --> 00:04:23,620 Ne jemi vetëm duke ndryshuar mënyrën se si ne të drejtuar atë. 92 00:04:23,620 --> 00:04:27,080 Dhe gjithashtu mos harroni, ne nuk kemi ridrejtuar syswrite këtë kohë, 93 00:04:27,080 --> 00:04:28,970 kështu që output e programit ishte ende 94 00:04:28,970 --> 00:04:31,040 shfaqet në terminal. 95 00:04:31,040 --> 00:04:33,500 Ne mund, sigurisht, të përcjellim si STDIN 96 00:04:33,500 --> 00:04:37,320 dhe syswrite si kjo. 97 00:04:37,320 --> 00:04:43,550 Tani, file2.txt përmban vijën e parë të file.txt. 98 00:04:43,550 --> 00:04:46,140 >> Pra, duke përdorur këta operatorë, ne kemi qenë në gjendje të lexojnë dhe 99 00:04:46,140 --> 00:04:48,130 shkruar nga fotografi tekst. 100 00:04:48,130 --> 00:04:51,890 Tani, le të shohim se si ne mund të përdorni prodhimin e një programi si 101 00:04:51,890 --> 00:04:54,710 të dhëna në një tjetër program. 102 00:04:54,710 --> 00:04:56,650 Kështu që këtu është një tjetër program të thjeshtë C I 103 00:04:56,650 --> 00:05:00,190 kanë quajtur këtu hello.c. 104 00:05:00,190 --> 00:05:02,617 Siç mund ta shikoni, kjo thjesht rezultatet "Hi 105 00:05:02,617 --> 00:05:04,430 atje! "të përdoruesit. 106 00:05:04,430 --> 00:05:08,890 Nëse unë dua të përcjellim të përdorin si input prodhimin e hello - 107 00:05:08,890 --> 00:05:10,190 Një tjetër program - 108 00:05:10,190 --> 00:05:13,920 Unë mund të parë të përcjellim syswrite e përshëndetje në një skedar të quajtur 109 00:05:13,920 --> 00:05:18,960 input.txt, pastaj përcjellëse STDIN e përcjellim me atë të njëjtë 110 00:05:18,960 --> 00:05:21,190 file - input.txt. 111 00:05:21,190 --> 00:05:26,730 Kështu që unë mund të bëj. / Përshëndetje> input.txt. 112 00:05:26,730 --> 00:05:28,810 Shtypni Enter për të ekzekutuar këtë. 113 00:05:28,810 --> 00:05:31,910 Ndjekur nga. / Redirect < 114 00:05:31,910 --> 00:05:35,270 input.txt, dhe ekzekutojë se. 115 00:05:35,270 --> 00:05:38,290 Pra, ne mund të shkurtojnë këtë pak me një pikëpresje, e cila lejon 116 00:05:38,290 --> 00:05:41,360 na për të drejtuar dy ose më shumë komandat në të njëjtën linjë. 117 00:05:41,360 --> 00:05:47,920 Kështu që unë mund të them,. / Përshëndetje> input.txt, pikëpresje, 118 00:05:47,920 --> 00:05:50,580 . / Përcjellëse 00:05:56,740 >> Pra kjo punon, por ajo ende ndihet mjaft pashije. 120 00:05:56,740 --> 00:05:59,530 Unë do të thotë, nuk kemi me të vërtetë nevojë për këtë skedar teksti ndërmjetësues që është 121 00:05:59,530 --> 00:06:02,520 nuk është e nevojshme pas përcjellëse shkon? 122 00:06:02,520 --> 00:06:05,780 Për fat të mirë, ne mund të shmangur këtë skedë ekstra tekst duke përdorur atë që është 123 00:06:05,780 --> 00:06:07,220 quajtur një tub. 124 00:06:07,220 --> 00:06:13,740 Nëse unë them, / Përshëndetje |.. / Përcjellëse, atëherë syswrite e 125 00:06:13,740 --> 00:06:15,310 programi në të majtë - 126 00:06:15,310 --> 00:06:16,740 në këtë rast, hello - 127 00:06:16,740 --> 00:06:18,970 do të përdoret si input standard për 128 00:06:18,970 --> 00:06:20,370 Programi në të djathtë. 129 00:06:20,370 --> 00:06:24,850 Në këtë rast, përcjellëse. Pra, le të drejtuar këtë. 130 00:06:24,850 --> 00:06:25,930 >> Nuk shkojmë. 131 00:06:25,930 --> 00:06:30,080 Ne mund të shohim se prodhimi e Hello është përdorur si input 132 00:06:30,080 --> 00:06:31,520 për përcjellëse. 133 00:06:31,520 --> 00:06:34,890 Nga stringing së bashku duke përdorur komandat tuba, ne formojnë atë që është 134 00:06:34,890 --> 00:06:38,120 quajtur një tubacion, që prodhimi ynë është në thelb duke lëvizur 135 00:06:38,120 --> 00:06:40,590 përmes një sekuencë të komandave. 136 00:06:40,590 --> 00:06:43,570 Duke përdorur tuba, ne mund të bëjmë disa cool stuff pa nevojë për 137 00:06:43,570 --> 00:06:45,870 shkruani ndonjë kod në të gjitha. 138 00:06:45,870 --> 00:06:48,760 Për shembull, le të thonë se ne duam të dimë se sa fotografi janë 139 00:06:48,760 --> 00:06:50,630 brenda këtë directory. 140 00:06:50,630 --> 00:06:55,200 Duke përdorur një tub, ne mund të kombinohen komandën ls me wc - 141 00:06:55,200 --> 00:06:56,460 ose Wordcount - 142 00:06:56,460 --> 00:06:57,850 komandës. 143 00:06:57,850 --> 00:07:02,230 Ls do të prodhimit çdo skedar në directory për stdout dhe 144 00:07:02,230 --> 00:07:08,040 WC do të na tregoni se sa rreshta janë dhënë në atë anë STDIN. 145 00:07:08,040 --> 00:07:12,440 Pra, nëse themi ls | wc-l - 146 00:07:12,440 --> 00:07:16,800 furnizuar-l flamurin për të treguar atë wc për të numëruar rreshta - 147 00:07:16,800 --> 00:07:19,260 ne mund të shohim saktësisht se sa fotografi janë 148 00:07:19,260 --> 00:07:21,940 në dosjen aktuale. 149 00:07:21,940 --> 00:07:24,570 >> Pra, le të marrin një vështrim në një shembull më shumë. 150 00:07:24,570 --> 00:07:27,740 Unë kam këtu një skedar të quajtur students.txt, 151 00:07:27,740 --> 00:07:29,600 me një listë të emrave. 152 00:07:29,600 --> 00:07:32,730 Megjithatë, këto emra nuk janë në asnjë mënyrë të gjithë, dhe kjo duket 153 00:07:32,730 --> 00:07:34,850 si disa emra janë të përsëritura. 154 00:07:34,850 --> 00:07:38,510 Ajo që ne duam është një listë e emrave unike në alfabetit 155 00:07:38,510 --> 00:07:42,550 mënyrë, ruhen në një file të quajtur final.txt. 156 00:07:42,550 --> 00:07:45,210 Ne mund të, natyrisht, të shkruaj një program C për të bërë këtë për ne. 157 00:07:45,210 --> 00:07:46,560 Por ajo do të marrë të panevojshme 158 00:07:46,560 --> 00:07:48,560 komplekse shumë shpejt. 159 00:07:48,560 --> 00:07:51,740 Le të përdorin në vend të tubave dhe disa Built-in-tools për të zgjidhur 160 00:07:51,740 --> 00:07:53,300 ky problem. 161 00:07:53,300 --> 00:07:57,760 >> Gjëja e parë që ne duhet të bëni është të lexuar students.txt file. 162 00:07:57,760 --> 00:08:00,530 Komanda mace do të bëjë vetëm atë. 163 00:08:00,530 --> 00:08:03,230 Ajo do të lexoni në dosjen e specifikuar dhe të shkruajnë 164 00:08:03,230 --> 00:08:05,750 Përmbajtja e saj në stdout. 165 00:08:05,750 --> 00:08:07,570 Pasi kemi lexuar skedar teksti, ne do 166 00:08:07,570 --> 00:08:09,490 doni të lloj emrat. 167 00:08:09,490 --> 00:08:12,510 Komanda lloj mund të trajtojë këtë për ne. 168 00:08:12,510 --> 00:08:16,830 Rendit do të prodhimit linjë furnizuar me anë të STDIN stdout 169 00:08:16,830 --> 00:08:19,310 në mënyrë renditura. 170 00:08:19,310 --> 00:08:23,450 Në mënyrë që të furnizimit me përmbajtjen e students.txt në 171 00:08:23,450 --> 00:08:29,600 STDIN Rendit, ne mund të përdorni një tub për të kombinuar mace dhe lloj. 172 00:08:29,600 --> 00:08:34,440 Kështu që unë mund të ekzekutojë cat students.txt | lloj dhe 173 00:08:34,440 --> 00:08:35,640 shtypni Enter. 174 00:08:35,640 --> 00:08:39,309 Dhe tani, ne shohim përmbajtjen e students.txt në 175 00:08:39,309 --> 00:08:40,909 sipas rendit alfabetik. 176 00:08:40,909 --> 00:08:42,860 >> Pra, le të shtoni një tjetër komandë - 177 00:08:42,860 --> 00:08:44,730 uniq, ose unik - 178 00:08:44,730 --> 00:08:46,230 të tubacionit tonë. 179 00:08:46,230 --> 00:08:49,810 Si ju mund të me mend, uniq, kur furnizuar një rend të renditura 180 00:08:49,810 --> 00:08:53,650 Linjat nëpërmjet STDIN, do të prodhimit linjat unike. 181 00:08:53,650 --> 00:08:56,910 Deri tani ne kemi students.txt cat 182 00:08:56,910 --> 00:09:00,040 | Lloj | uniq. 183 00:09:00,040 --> 00:09:03,330 Së fundi, ne mund të shpëtojë e prodhimit të tubacionit në një 184 00:09:03,330 --> 00:09:09,090 fotografi nëpërmjet cat students.txt | lloj | uniq 185 00:09:09,090 --> 00:09:12,440 > Final.txt. 186 00:09:12,440 --> 00:09:16,260 Pra, në qoftë se ne e hapur deri final.txt, ne kemi pikërisht ajo që ne kemi qenë 187 00:09:16,260 --> 00:09:17,270 duke kërkuar për: 188 00:09:17,270 --> 00:09:20,180 një listë e emrave unik në rend alfabetik, 189 00:09:20,180 --> 00:09:22,150 ruhen në një skedar teksti. 190 00:09:22,150 --> 00:09:26,020 Nga rruga, ne gjithashtu mund të ketë thënë renditjes < 191 00:09:26,020 --> 00:09:32,290 students.txt | uniq> final.txt për të bërë pikërisht 192 00:09:32,290 --> 00:09:35,400 të njëjtën gjë, duke përdorur secili nga operatorët e kemi parë në 193 00:09:35,400 --> 00:09:36,580 kjo video. 194 00:09:36,580 --> 00:09:39,540 >> Emri im është Tommy, dhe kjo është CS50.