1 00:00:07,060 --> 00:00:08,420 [Powered by Google Translate] TOMMY: Tässä videossa me oppia 2 00:00:08,420 --> 00:00:10,140 suuntaamaan ja putket. 3 00:00:10,140 --> 00:00:12,780 Toistaiseksi olemme käyttäneet toiminnot kuten printf ja 4 00:00:12,780 --> 00:00:15,590 lähtödata päätelaitteelle ja toimintoja, kuten GetString 5 00:00:15,590 --> 00:00:17,520 jotta käyttäjä voi antaa panoksensa meidän 6 00:00:17,520 --> 00:00:19,490 Ohjelma näppäimistöllä. 7 00:00:19,490 --> 00:00:21,880 Katsotaanpa nopeasti katsomaan ohjelmaa, joka saa linja 8 00:00:21,880 --> 00:00:25,960 sisäänsyöte käyttäjältä ja syöttää sitten sen. 9 00:00:25,960 --> 00:00:28,990 >> Rivillä 7, olemme kehotukset käyttäjältä merkkijonon, ja 10 00:00:28,990 --> 00:00:31,680 Sitten rivillä 8, me tulostaa sen takaisin ulos. 11 00:00:31,680 --> 00:00:35,220 Katsotaanpa kääntää ja ajaa meidän ohjelmaa. 12 00:00:35,220 --> 00:00:35,900 Suuri. 13 00:00:35,900 --> 00:00:37,620 Merkkijono annoimme yhtyivät takaisin 14 00:00:37,620 --> 00:00:39,170 meille terminaaliin. 15 00:00:39,170 --> 00:00:42,110 Tämä tapahtui siksi printf funktion kirjoitti 16 00:00:42,110 --> 00:00:46,220 stream kutsutaan standardi ulos, tai s-t-d-out. 17 00:00:46,220 --> 00:00:49,230 Kun jotain on kirjoitettu stdout, se on oletusarvoisesti 18 00:00:49,230 --> 00:00:51,110 näytetään päätelaitteen. 19 00:00:51,110 --> 00:00:53,720 >> Niin, että ihan hyvä, mutta mitä jos sen sijaan, että yksinkertaisesti 20 00:00:53,720 --> 00:00:57,700 näyttää merkkijonon, halusimme tallentaa sen tiedoston? 21 00:00:57,700 --> 00:01:00,470 Esimerkiksi meidän kannattaa muistaa, mitä meidän 22 00:01:00,470 --> 00:01:04,450 Ohjelma teki, kun annoimme sen tietty tulo myöhemmin. 23 00:01:04,450 --> 00:01:07,270 Yksi tapa olisi tehdä tätä meidän C-ohjelma, käyttäen 24 00:01:07,270 --> 00:01:09,680 joitakin erityisiä toimintoja kirjallisesti tiedostoja että me 25 00:01:09,680 --> 00:01:11,270 nähdä toinen video. 26 00:01:11,270 --> 00:01:13,260 Vieläkin helpompaa, vaikka olisi jotenkin 27 00:01:13,260 --> 00:01:16,090 redirect stdout tiedostoon. 28 00:01:16,090 --> 00:01:19,780 Tällä tavoin, kun printf kirjoittaa stdout, sisältö 29 00:01:19,780 --> 00:01:21,720 voidaan kirjoittaa tiedostoon sijaan 30 00:01:21,720 --> 00:01:23,410 näytetään päätelaitteen. 31 00:01:23,410 --> 00:01:26,690 Voimme tehdä juuri niin lisäämällä suurempi kuin-merkki, jonka jälkeen 32 00:01:26,690 --> 00:01:30,820 jonka tiedostonimen, jotta komento käytämme toteuttaa ohjelmaamme. 33 00:01:30,820 --> 00:01:34,730 >> Niin, eikä vain täytäntöönpanovaltiossa. / Redirect, voimme 34 00:01:34,730 --> 00:01:38,880 suorittaa. / uudelleenohjaus, jonka jälkeen on suurempi kuin merkki, jota seuraa 35 00:01:38,880 --> 00:01:41,530 tiedostonimi, kuten tiedosto.txt. 36 00:01:41,530 --> 00:01:44,290 Katsotaan mitä tapahtuu. 37 00:01:44,290 --> 00:01:45,130 OK. 38 00:01:45,130 --> 00:01:48,470 Huomaa, että tällä kertaa, mitään ei näy päätteellä, 39 00:01:48,470 --> 00:01:50,290 mutta emme ole muuttaneet sisältöä meidän 40 00:01:50,290 --> 00:01:52,040 C ohjelmaa lainkaan. 41 00:01:52,040 --> 00:01:56,090 Katsotaanpa nyt tutkia tämän hakemiston sisällöstä ls. 42 00:01:56,090 --> 00:01:56,630 >> Selvä. 43 00:01:56,630 --> 00:02:00,840 Meillä on nyt uusi tiedosto meidän hakemistoon nimeltä tiedosto.txt, 44 00:02:00,840 --> 00:02:03,640 joka on tiedoston nimi toimitimme kun juoksi meidän 45 00:02:03,640 --> 00:02:05,050 Redirect ohjelma. 46 00:02:05,050 --> 00:02:08,020 Katsotaanpa avata tiedosto.txt. 47 00:02:08,020 --> 00:02:11,840 Ja täällä, voimme nähdä, että stdout pois redirect oli 48 00:02:11,840 --> 00:02:15,550 kirjoitetaan tiedostoon nimeltä tiedosto.txt. 49 00:02:15,550 --> 00:02:18,470 Joten suorita edellisen komennon uudestaan, mutta toimittaa 50 00:02:18,470 --> 00:02:20,075 Eri tulo tällä kertaa. 51 00:02:25,140 --> 00:02:25,900 Okei. 52 00:02:25,900 --> 00:02:28,205 Katsotaanpa katsomaan tiedosto.txt nyt. 53 00:02:31,070 --> 00:02:34,580 >> Voimme nähdä tässä, että tiedosto on korvattu, joten meidän 54 00:02:34,580 --> 00:02:37,120 alkuperäinen panos ei ole enää. 55 00:02:37,120 --> 00:02:40,280 Jos sen sijaan haluat liittää tähän tiedostoon, asettaa uusi 56 00:02:40,280 --> 00:02:43,600 tulo alapuolella olevia tiedoston sisältö, voimme 57 00:02:43,600 --> 00:02:46,800 käyttää kahta suurempi kuin-merkkejä yhden sijasta. 58 00:02:46,800 --> 00:02:48,050 Kokeillaan sitä. 59 00:02:52,160 --> 00:02:57,910 Nyt, jos avaamme tiedosto.txt uudelleen, voimme nähdä meidän kummankin 60 00:02:57,910 --> 00:02:59,580 syöterivit. 61 00:02:59,580 --> 00:03:02,180 Joissakin tapauksissa saatamme haluta hylätä mitään 62 00:03:02,180 --> 00:03:03,850 lähtö ohjelmamme. 63 00:03:03,850 --> 00:03:06,450 Kirjoittamisen sijasta tuloste tiedostoon ja poistamalla 64 00:03:06,450 --> 00:03:09,310 tiedoston, kun olemme tehneet sen, voimme kirjoittaa erityiseen 65 00:03:09,310 --> 00:03:12,360 tiedosto nimeltä / dev / null. 66 00:03:12,360 --> 00:03:15,160 Kun jotain on kirjoitettu / dev/null-- 67 00:03:15,160 --> 00:03:16,960 tai vain devnull lyhyitä - 68 00:03:16,960 --> 00:03:18,950 se hylätään automaattisesti. 69 00:03:18,950 --> 00:03:23,290 Joten ajattele devnull kuin musta aukko tietosi. 70 00:03:23,290 --> 00:03:26,070 >> Joten nyt olemme nähneet, kuinka suurempi kuin-merkki voidaan ohjata 71 00:03:26,070 --> 00:03:29,610 stdout, katsotaanpa miten voimme ohjata standardi - 72 00:03:29,610 --> 00:03:31,250 tai s-t-d-in - 73 00:03:31,250 --> 00:03:33,550 analogi stdout. 74 00:03:33,550 --> 00:03:36,010 Vaikka toimintoja, kuten printf kirjoittaa stream kutsutaan 75 00:03:36,010 --> 00:03:40,500 stdout, GetString ja vastaavat toiminnot luetaan virrasta 76 00:03:40,500 --> 00:03:43,770 nimeltään stdin, joka oletusarvoisesti on virta 77 00:03:43,770 --> 00:03:46,290 merkkiä näppäimistöllä kirjoitettu. 78 00:03:46,290 --> 00:03:50,010 Voimme suunnata stdin käyttämällä vähemmän kuin merkki, jota seuraa 79 00:03:50,010 --> 00:03:51,370 jonka tiedostonimi. 80 00:03:51,370 --> 00:03:54,000 Nyt sen sijaan kehotetaan käyttäjää tuloon 81 00:03:54,000 --> 00:03:57,870 terminaali, ohjelma avaa tiedoston me määritetty ja käyttää 82 00:03:57,870 --> 00:03:59,790 sen linjat syötteenä. 83 00:03:59,790 --> 00:04:02,620 >> Katsotaan mitä tapahtuu. 84 00:04:02,620 --> 00:04:03,280 Suuri. 85 00:04:03,280 --> 00:04:07,590 Ensimmäinen rivi tiedosto.txt on tulostettu päätelaitteelle 86 00:04:07,590 --> 00:04:10,160 koska olemme soittamalla GetString kerran. 87 00:04:10,160 --> 00:04:13,170 Jos meillä oli toinen puhelu GetString meidän ohjelmaan, 88 00:04:13,170 --> 00:04:16,149 seuraavalle riville tiedosto.txt olisi käytetty 89 00:04:16,149 --> 00:04:17,990 tulo että puhelun. 90 00:04:17,990 --> 00:04:21,050 Jälleen, emme ole muutettu meidän C-ohjelmaan lainkaan. 91 00:04:21,050 --> 00:04:23,620 Olemme vain muuttamalla miten käyttää sitä. 92 00:04:23,620 --> 00:04:27,080 Ja myös muistaa, ettemme ole ohjata stdout tällä kertaa, 93 00:04:27,080 --> 00:04:28,970 niin lähtö ohjelma oli yhä 94 00:04:28,970 --> 00:04:31,040 näytetään pääte. 95 00:04:31,040 --> 00:04:33,500 Voimme tietenkin ohjata sekä stdin 96 00:04:33,500 --> 00:04:37,320 ja stdout näin. 97 00:04:37,320 --> 00:04:43,550 Nyt, file2.txt sisältää ensimmäisen rivin tiedosto.txt. 98 00:04:43,550 --> 00:04:46,140 >> Joten, käyttää näitä operaattoreita, olemme voineet lukea ja 99 00:04:46,140 --> 00:04:48,130 kirjoittaa tekstitiedostoja. 100 00:04:48,130 --> 00:04:51,890 Nyt, katsotaanpa miten voimme käyttää tuotos yhden ohjelman 101 00:04:51,890 --> 00:04:54,710 tulo toiseen ohjelmaan. 102 00:04:54,710 --> 00:04:56,650 Joten tässä on toinen yksinkertainen C-ohjelma I 103 00:04:56,650 --> 00:05:00,190 ovat tässä kutsutaan hello.c. 104 00:05:00,190 --> 00:05:02,617 Kuten näette, tämä yksinkertaisesti lähdöt "Hi 105 00:05:02,617 --> 00:05:04,430 siellä! "käyttäjälle. 106 00:05:04,430 --> 00:05:08,890 Jos haluan ohjata käyttää syötteenä lähtö Hello - 107 00:05:08,890 --> 00:05:10,190 toinen ohjelma - 108 00:05:10,190 --> 00:05:13,920 En voisi ensin suunnata stdout Hello tiedostoon nimeltä 109 00:05:13,920 --> 00:05:18,960 input.txt, ohjaa sitten stdin on uudelleenohjaus saman 110 00:05:18,960 --> 00:05:21,190 tiedosto - input.txt. 111 00:05:21,190 --> 00:05:26,730 Joten en voi tehdä. / Hello> input.txt. 112 00:05:26,730 --> 00:05:28,810 Paina Enter suorittamaan tätä. 113 00:05:28,810 --> 00:05:31,910 Seuraaja. / Redirect < 114 00:05:31,910 --> 00:05:35,270 input.txt ja suorittamiseen. 115 00:05:35,270 --> 00:05:38,290 Joten voimme lyhentää tätä hieman toisistaan ​​puolipisteellä, joka mahdollistaa 116 00:05:38,290 --> 00:05:41,360 meitä kahta tai useampaa komentoja samalla linjalla. 117 00:05:41,360 --> 00:05:47,920 Voin siis sanoa,. / Hei> input.txt, puolipiste, 118 00:05:47,920 --> 00:05:50,580 . / Redirect 00:05:56,740 >> Joten tämä toimii, mutta se silti tuntuu melko kömpelö. 120 00:05:56,740 --> 00:05:59,530 Tarkoitan, me todella tarvitsemme tätä välittäjä tekstitiedosto, joka on 121 00:05:59,530 --> 00:06:02,520 enää tarvita sen jälkeen uudelleenohjaus toimii? 122 00:06:02,520 --> 00:06:05,780 Onneksi voimme välttää tämän ylimääräisen tekstitiedosto käyttäen mitä 123 00:06:05,780 --> 00:06:07,220 kutsutaan putki. 124 00:06:07,220 --> 00:06:13,740 Jos sanon,. / Hei |. / Redirect sitten stdout ja 125 00:06:13,740 --> 00:06:15,310 Ohjelma vasemmalla - 126 00:06:15,310 --> 00:06:16,740 tässä tapauksessa, hei - 127 00:06:16,740 --> 00:06:18,970 käytetään standardina tulo 128 00:06:18,970 --> 00:06:20,370 Ohjelman oikealla. 129 00:06:20,370 --> 00:06:24,850 Tällöin uudelleenohjaus. Joten suorita tätä. 130 00:06:24,850 --> 00:06:25,930 >> Siellä mennään. 131 00:06:25,930 --> 00:06:30,080 Voimme nähdä, että tuotos Hello käytettiin panos 132 00:06:30,080 --> 00:06:31,520 ja uudelleenohjaus. 133 00:06:31,520 --> 00:06:34,890 Nauhassa komentoja toisiinsa putket, muodostamme mitä 134 00:06:34,890 --> 00:06:38,120 kutsutaan putki, koska meidän tuotanto on pääosin liikkuu 135 00:06:38,120 --> 00:06:40,590 järjestyksessä läpi komentoja. 136 00:06:40,590 --> 00:06:43,570 Käyttämällä putket, voimme tehdä hienoja juttuja tarvitsematta 137 00:06:43,570 --> 00:06:45,870 kirjoittaa koodia lainkaan. 138 00:06:45,870 --> 00:06:48,760 Esimerkiksi sanokaamme haluamme tietää, kuinka monta tiedostoa 139 00:06:48,760 --> 00:06:50,630 sisällä tähän hakemistoon. 140 00:06:50,630 --> 00:06:55,200 Käyttämällä putki, voimme yhdistää ls komento WC - 141 00:06:55,200 --> 00:06:56,460 tai Wordcount - 142 00:06:56,460 --> 00:06:57,850 komento. 143 00:06:57,850 --> 00:07:02,230 Ls tulee tulostaa jokaisen tiedoston hakemistoon stdout, ja 144 00:07:02,230 --> 00:07:08,040 WC kertoo meille kuinka monta riviä saivat sitä kautta stdin. 145 00:07:08,040 --> 00:07:12,440 Joten, jos sanomme LS | wc-l - 146 00:07:12,440 --> 00:07:16,800 toimittaa-l lipun wc kertoa se laskea riviä - 147 00:07:16,800 --> 00:07:19,260 Voimme nähdä kuinka monta tiedostoa 148 00:07:19,260 --> 00:07:21,940 nykyiseen hakemistoon. 149 00:07:21,940 --> 00:07:24,570 >> Joten katsomaan yksi esimerkki. 150 00:07:24,570 --> 00:07:27,740 Minulla on täällä tiedosto nimeltä students.txt, 151 00:07:27,740 --> 00:07:29,600 joiden nimiluettelo. 152 00:07:29,600 --> 00:07:32,730 Kuitenkin nämä nimet eivät ole missään järjestyksessä kaiken, ja se näyttää 153 00:07:32,730 --> 00:07:34,850 kuin muutamia nimiä toistetaan. 154 00:07:34,850 --> 00:07:38,510 Haluamme lista yksilölliset nimet aakkosjärjestyksessä 155 00:07:38,510 --> 00:07:42,550 järjestyksessä tallennetaan tiedostoon nimeltä final.txt. 156 00:07:42,550 --> 00:07:45,210 Voisimme tietysti kirjoittaa C-ohjelma tehdä tätä meille. 157 00:07:45,210 --> 00:07:46,560 Mutta se tulee saada tarpeettoman 158 00:07:46,560 --> 00:07:48,560 monimutkainen melko nopeasti. 159 00:07:48,560 --> 00:07:51,740 Katsotaanpa sen sijaan käyttää putkia ja joitakin sisäänrakennettu-työkaluja ratkaista 160 00:07:51,740 --> 00:07:53,300 tämä ongelma. 161 00:07:53,300 --> 00:07:57,760 >> Ensimmäinen asia, joka meidän täytyy tehdä, on lukea tiedosto students.txt. 162 00:07:57,760 --> 00:08:00,530 Kissa komento tekevät juuri niin. 163 00:08:00,530 --> 00:08:03,230 Se luetaan määritetyn tiedoston ja kirjoittaa 164 00:08:03,230 --> 00:08:05,750 sisällön stdout. 165 00:08:05,750 --> 00:08:07,570 Kun olemme lukeneet tekstitiedosto, hyvitämme 166 00:08:07,570 --> 00:08:09,490 haluat lajitella nimiä. 167 00:08:09,490 --> 00:08:12,510 Sort-komennolla voi käsitellä tätä meille. 168 00:08:12,510 --> 00:08:16,830 Järjestä syöttävät linjan kautta syötetyn stdin stdout 169 00:08:16,830 --> 00:08:19,310 vuonna lajiteltu järjestyksessä. 170 00:08:19,310 --> 00:08:23,450 Voidakseen toimittaa sisällön students.txt ja 171 00:08:23,450 --> 00:08:29,600 sort n stdin, voisimme käyttää putkea yhdistää kissan ja lajitella. 172 00:08:29,600 --> 00:08:34,440 Joten en voi suorittaa kissan students.txt | sort ja 173 00:08:34,440 --> 00:08:35,640 paina Enter. 174 00:08:35,640 --> 00:08:39,309 Ja nyt näemme sisällön students.txt vuonna 175 00:08:39,309 --> 00:08:40,909 aakkosjärjestyksessä. 176 00:08:40,909 --> 00:08:42,860 >> Joten lisää toinen käsky - 177 00:08:42,860 --> 00:08:44,730 Uniq, tai ainutlaatuinen - 178 00:08:44,730 --> 00:08:46,230 meidän putki. 179 00:08:46,230 --> 00:08:49,810 Kuten arvata saattaa, uniq, kun mukana lajitellaan järjestyksessä 180 00:08:49,810 --> 00:08:53,650 linjat kautta stdin, joka tulostaa ainutlaatuinen linjat. 181 00:08:53,650 --> 00:08:56,910 Joten nyt meillä on kissa students.txt 182 00:08:56,910 --> 00:09:00,040 | Sort | uniq. 183 00:09:00,040 --> 00:09:03,330 Lopuksi, voimme säästää lähdön putkilinja 184 00:09:03,330 --> 00:09:09,090 tiedoston kautta kissa students.txt | sort | uniq 185 00:09:09,090 --> 00:09:12,440 > Final.txt. 186 00:09:12,440 --> 00:09:16,260 Joten, jos me avata final.txt, meillä on mitä me olimme 187 00:09:16,260 --> 00:09:17,270 etsivät: 188 00:09:17,270 --> 00:09:20,180 luettelon ainutlaatuisia aakkosjärjestyksessä, 189 00:09:20,180 --> 00:09:22,150 tallennetaan tekstitiedostoon. 190 00:09:22,150 --> 00:09:26,020 Muuten olemme myös voineet sanoa sort < 191 00:09:26,020 --> 00:09:32,290 students.txt | Uniq> final.txt tehdä täsmälleen 192 00:09:32,290 --> 00:09:35,400 sama asia, käyttäen kunkin toimijoiden olemme nähneet 193 00:09:35,400 --> 00:09:36,580 tämän videon. 194 00:09:36,580 --> 00:09:39,540 >> Nimeni on Tommy, ja tämä on CS50.