1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [Artikulua 5 - erosoagoa] 2 00:00:02,500 --> 00:00:04,690 [Rob Bowden - Harvard Unibertsitatea] 3 00:00:04,690 --> 00:00:07,250 [Hau CS50 da. - CS50.TV] 4 00:00:08,990 --> 00:00:14,250 >> Nire posta esan nuen bezala, erabil dezakezu gauza asko daude 5 00:00:14,250 --> 00:00:17,060 tresna benetan egiten arazo multzo baino beste. 6 00:00:17,060 --> 00:00:19,910 Tresnan egiten duzun baizik gomendatzen dugu gero errazago zaitzakegu duzu 7 00:00:19,910 --> 00:00:22,070 eta dena da nola lanera joan dakigu. 8 00:00:22,070 --> 00:00:26,950 Baina bat non gauza egin ahal izango duzu, baldin eta esan adibide gisa, ez duzu sarbidea 9 00:00:26,950 --> 00:00:31,570 -tresnaren bat edo Zientzia Center sotoan lan egin nahi baduzu 10 00:00:31,570 --> 00:00:33,090 benetan aparatuaren dute ere 11 00:00:33,090 --> 00:00:35,150 nahi izanez gero, edozein lekutan lan egiteko. 12 00:00:35,150 --> 00:00:42,370 Horren adibide da / ikusten duzu SSH entzun? 13 00:00:44,380 --> 00:00:47,780 SSH da, funtsean, besterik gabe, zerbait konektatzeko bezala. 14 00:00:47,780 --> 00:00:51,340 Egia esan, oraintxe dut aparatuaren SSHed. 15 00:00:51,340 --> 00:00:54,290 Inoiz ez dut zuzenean tresnan. 16 00:00:55,930 --> 00:01:01,060 Hemen-tresna da, eta itxura behera hemen IP helbide hau ikusiko duzu. 17 00:01:01,060 --> 00:01:03,650 -Tresnak, berez, inoiz ez dut lan; 18 00:01:03,650 --> 00:01:08,840 Beti dut leiho bat iTerm2 / terminal leihoa. 19 00:01:08,840 --> 00:01:15,910 IP helbide hori, ssh jharvard@192.168.129.128 SSH ditzakezu. 20 00:01:15,910 --> 00:01:20,390 Zenbaki hori gogoratzen dut oso erraz da, nice eredu bat delako. 21 00:01:20,390 --> 00:01:24,920 Baina hori galdetu egingo Nire pasahitza, eta gaur egun naiz aparatuaren dut. 22 00:01:24,920 --> 00:01:33,060 Funtsean, puntu honetan, ireki baduzu, terminal bat-tresnaren beraren barruan, 23 00:01:33,060 --> 00:01:36,350 Interfaze hau, baina erabili nahi duzun da, bera 24 00:01:36,350 --> 00:01:40,010 interfaze gisa baino gehiago naiz Hemen, baina orain ari SSHed. 25 00:01:42,240 --> 00:01:44,920 Ez duzu tresnara SSH. 26 00:01:44,920 --> 00:01:52,360 Beste leku bat SSH ezin izan duzu adibide bat da, nahiko ziur naiz lehenespenez - 27 00:01:52,360 --> 00:01:55,020 Oh. Handiagoa da. 28 00:01:55,020 --> 00:02:01,130 Guztiak default FAS FAS zerbitzariak kontuak izan behar. 29 00:02:01,130 --> 00:02:06,840 Niretzat, SSH nuke rbowden@nice.fas.harvard.edu. 30 00:02:06,840 --> 00:02:11,610 Lehen aldiz eskatu du, eta bai esan duzu. 31 00:02:11,610 --> 00:02:15,840 Nire pasahitza besterik ez da izango nire FAS pasahitza. 32 00:02:15,840 --> 00:02:22,650 Eta beraz, gaur egun, naiz nice zerbitzariak SSHed, eta hemen nahi dut ezer egin ezin dut. 33 00:02:22,650 --> 00:02:28,560 Asko, klaseak hartu, baliteke 124 atsegin stuff igo duzun hemen 34 00:02:28,560 --> 00:02:30,950 arazo multzo benetan aurkeztu. 35 00:02:30,950 --> 00:02:34,100 Baina esan, ez duzu zure-tresnaren sarbidea. 36 00:02:34,100 --> 00:02:37,910 Ondoren gauza egin dezakezu, hemen bezala esango 37 00:02:37,910 --> 00:02:42,160 Hau besterik ez da gure galdera atalean. 38 00:02:42,160 --> 00:02:45,070 Eskatuko dizu Horretarako, aparatuaren. 39 00:02:45,070 --> 00:02:47,790 Horren ordez, besterik ez dut egin zerbitzarian. 40 00:02:47,790 --> 00:02:50,560 Deskonprimitu duten noa. 41 00:02:50,560 --> 00:02:55,670 Arazoa da gedit antzeko zerbait erabiltzen duzula ari izango 42 00:02:55,670 --> 00:02:58,160 edo edozein tresnaren barruan. 43 00:02:58,160 --> 00:03:01,830 Ez duzu duten FAS zerbitzariak. 44 00:03:01,830 --> 00:03:04,110 Besterik ez da interfaze hau testuala izango da. 45 00:03:04,110 --> 00:03:09,180 Beraz, bai bat izan nahi baduzu, saiatu testu-editore bat ez dutela ikasteko. 46 00:03:09,180 --> 00:03:12,130 Nano dute. 47 00:03:12,130 --> 00:03:14,990 Nano izan ohi da, nahiko erraza da erabiltzeko. 48 00:03:14,990 --> 00:03:19,470 Zure geziak erabil dezakezu, eta normalean idatzi. 49 00:03:19,470 --> 00:03:21,250 Beraz, ez da zaila. 50 00:03:21,250 --> 00:03:24,720 Nahi duzun benetan Fancy bada Emacs erabili ahal izango duzu, 51 00:03:24,720 --> 00:03:29,850 dudan beharko ez ez dudalako dakite nola itxi Emacs ireki. 52 00:03:29,850 --> 00:03:32,760 Kontrol X, Control C? Bai. 53 00:03:32,760 --> 00:03:35,310 Edo Vim, hau da, zer erabiliko dut erabili ahal izango duzu. 54 00:03:35,310 --> 00:03:37,800 Eta, beraz, horiek dira aukerak. 55 00:03:37,800 --> 00:03:43,830 Nahi ez baduzu, horretarako, egin dezakezu, gainera, begiratzen baduzu manual.cs50.net-- 56 00:03:43,830 --> 00:03:45,410 Oh. 57 00:03:45,410 --> 00:03:49,920 PC bat, SSH dezakezu plastilina erabiliz, 58 00:03:49,920 --> 00:03:51,940 bereizita deskargatzeko behar duzu. 59 00:03:51,940 --> 00:03:55,460 Mac batean, erabilera Terminal lehenetsia edo zuk iTerm2 deskargatu daiteke, 60 00:03:55,460 --> 00:03:58,490 fancy Terminal, nice bat bezalakoa da. 61 00:03:58,490 --> 00:04:03,780 Joan behar bada manual.cs50.net Notepad link bat ikusiko duzu + +, 62 00:04:03,780 --> 00:04:07,120 hau da, zer PC bat erabili ahal izango dituzu. 63 00:04:07,120 --> 00:04:13,340 SFTP Notepad aukera ematen du + +, hau da, funtsean, SSH. 64 00:04:13,340 --> 00:04:17,750 Zer da hau zuk utziko da editatu zure fitxategiak lokalki, 65 00:04:17,750 --> 00:04:20,670 eta, ondoren, gorde nahi duzun bakoitzean, nice.fas izango da gorde 66 00:04:20,670 --> 00:04:23,670 non gero berriro exekuta dezakezu ditu. 67 00:04:23,670 --> 00:04:26,880 Eta Mac bat baliokidea da TextWrangler izango da. 68 00:04:26,880 --> 00:04:28,760 Beraz, gauza bera egiten duzun aukera dago. 69 00:04:28,760 --> 00:04:32,800 Fitxategiak editatzeko lokalean eta gorde nice.fas aukera ematen du, 70 00:04:32,800 --> 00:04:35,730 non gero berriro exekuta dezakezu ditu. 71 00:04:35,730 --> 00:04:40,400 Beraz, zu inoiz bada-tresnaren bat gabe itsasten duzu, aukera hauek 72 00:04:40,400 --> 00:04:44,230 oraindik ere egin zure arazoa multzo. 73 00:04:44,230 --> 00:04:48,250 Arazo bat da, ez zarela CS50 liburutegia izan behar izango 74 00:04:48,250 --> 00:04:51,580 nice.fas lehenespenez ez delako. 75 00:04:51,580 --> 00:04:55,970 Edo deskargatzeko aukera duzu CS50 liburutegia 76 00:04:55,970 --> 00:04:58,470 Ez dut uste hori behar dut puntu honetan. 77 00:04:58,470 --> 00:05:03,270 Edo deskargatzeko aukera duzu CS50 liburutegia eta kopiatu baino gehiago nice.fas 78 00:05:03,270 --> 00:05:07,450 edo puntu honetan ez dugu erabili da gehiago hala ere, uste dut. 79 00:05:07,450 --> 00:05:12,720 Edo ez badugu, denbora dezakezu ordeztu ari duten 80 00:05:12,720 --> 00:05:18,480 CS50 liburutegi funtzioen inplementazioak hala ere. 81 00:05:18,480 --> 00:05:21,370 Beraz, ez luke Murrizketa bat askoz. 82 00:05:21,370 --> 00:05:23,710 Eta hori da. 83 00:05:26,460 --> 00:05:29,820 >> Tresnara atzera jo dut gaur egun; aparatuaren guztia egin dugu. 84 00:05:29,820 --> 00:05:37,510 Gure galdera atalean, hasieran, nire posta esan nuen bezala, 85 00:05:37,510 --> 00:05:43,620 bat ikusteko ziren ustezko labur buruz hitz egin dugu. 86 00:05:43,620 --> 00:05:51,980 Berbideratu eta Tutuak eta hiru galdera hauek ditugu. 87 00:05:51,980 --> 00:05:56,070 >> Horretarako, korrontea ez funtzio, printf bezala default idatzi? 88 00:05:56,070 --> 00:05:59,130 Korronte, beraz. Zer da korrontea? 89 00:06:06,520 --> 00:06:15,100 Korronte bat da, funtsean, bezala batzuk - 90 00:06:15,100 --> 00:06:21,450 Ez da 1s eta 0 s-iturri bat ere. 91 00:06:21,450 --> 00:06:24,920 Korrontea da hemen galdetuz out estandarra da. 92 00:06:24,920 --> 00:06:27,250 Eta beraz, estandar out korronte bat dela idazten duzunean, 93 00:06:27,250 --> 00:06:30,940 agertzen da pantailan. 94 00:06:30,940 --> 00:06:36,860 Standard out, erreka, idatzi besterik ez duzu 1s eta 0 s da esan nahi du, 95 00:06:36,860 --> 00:06:40,220 eta estandar out amaiera beste korronte horretatik aurrera irakurtzen du. 96 00:06:40,220 --> 00:06:43,540 1s eta 0 s kate bat besterik ez da. 97 00:06:43,540 --> 00:06:45,570 Los arroyos idatz dezakezu, edo erreka irakur dezakezu 98 00:06:45,570 --> 00:06:47,950 korrontea benetan da arabera. 99 00:06:47,950 --> 00:06:52,800 Beste bi erreka default estandarra eta errore estandarra. 100 00:06:52,800 --> 00:06:57,540 Standard da bakoitzean GetString ez, zuretzat sarrera stuff zain. 101 00:06:57,540 --> 00:07:01,570 Beraz, zain duzu, benetan estandarrean zain 102 00:07:01,570 --> 00:07:04,880 hau da, benetan zer idatzi teklatua lortuko duzu. 103 00:07:04,880 --> 00:07:07,530 Estandar sartu sartu ari zara idazten 104 00:07:07,530 --> 00:07:10,050 Standard error standard out baliokidea da, funtsean, 105 00:07:10,050 --> 00:07:13,280 baina horretan aditua da inprimatu errore estandarraren 106 00:07:13,280 --> 00:07:16,770 zauden ustezko errore-mezuak bakarrik inprimatu ahal izateko 107 00:07:16,770 --> 00:07:20,200 beraz, pantailan inprimatu mezuak erregularra artean bereizteko dezakezu 108 00:07:20,200 --> 00:07:24,560 errore-mezu estandar edo errore estandarra dute joan den arabera vs. 109 00:07:24,560 --> 00:07:28,660 Fitxategiak ere. 110 00:07:28,660 --> 00:07:32,440 Standard out, estandarra, eta errore estandarra erreka besterik ez bereziak dira, 111 00:07:32,440 --> 00:07:36,810 baina benetan, edozein fitxategi, fitxategi bat irekitzeko, bytes korronte bat bihurtzen da 112 00:07:36,810 --> 00:07:40,740 korronte hori irakurri dezakezu. 113 00:07:40,740 --> 00:07:47,770 Zati handiena, duzu, besterik byte korronte gisa fitxategi bat pentsatzea. 114 00:07:47,770 --> 00:07:51,190 Beraz, zer erreka idatzi dute lehenespenez? Standard out. 115 00:07:51,190 --> 00:07:56,980 >> Zer da> eta >> arteko desberdintasuna? 116 00:07:58,140 --> 00:08:03,710 Ba al edonork ikusi bideoa aldez aurretik? Ongi da. 117 00:08:03,710 --> 00:08:10,960 > Nola sartu redirect fitxategiak izango da, 118 00:08:10,960 --> 00:08:15,240 eta >> ere fitxategiak irteera redirect 119 00:08:15,240 --> 00:08:17,820 baizik fitxategi eransteko. 120 00:08:17,820 --> 00:08:23,430 Esate baterako, demagun dict eskubide izango dute hemen gertatuko I 121 00:08:23,430 --> 00:08:27,020 dict barruan stuff cat, cat, dog, arraina, txakurra da. 122 00:08:27,020 --> 00:08:31,530 Komandoa komando-lerroan duzula cat da, 123 00:08:31,530 --> 00:08:34,539 den besterik gabe, fitxategi batean inprimatzeko. 124 00:08:34,539 --> 00:08:40,679 Beraz, cat dict diot, cat, cat, dog, arraina, txakurra inprimatu dute. Hori da cat guztia egiten du. 125 00:08:40,679 --> 00:08:46,280 Horrek esan nahi du, modu estandarrean inprimatu cat, cat, dog, arraina, txakurra out. 126 00:08:46,280 --> 00:08:53,240 Ordez, hori birbideratu fitxategi batean nahi baduzu, erabili> I daiteke eta redirect edozein fitxategia da. 127 00:08:53,240 --> 00:08:56,460 Fitxategi deitu dut. 128 00:08:56,460 --> 00:09:00,320 Beraz, gaur egun I ls izanez gero, ikus izeneko fitxategi fitxategi berri bat daukat dut. 129 00:09:00,320 --> 00:09:05,700 Eta ireki dut bada, zehazki zer cat komando-lerroan jarri izan dute. 130 00:09:05,700 --> 00:09:11,040 Beraz, orain ez dut berriro, eta ondoren irteera berbideraketa fitxategi egingo 131 00:09:11,040 --> 00:09:13,930 eta zehatza gauza bera izan dut. 132 00:09:13,930 --> 00:09:17,910 Beraz, teknikoki, erabat overrode izan duguna. 133 00:09:17,910 --> 00:09:22,970 Ikusi eta alda dezaket dict dugu, txakurra hartu nuen. 134 00:09:22,970 --> 00:09:29,980 Orain dugu cat fitxategi dict berriro bada, txakur kendu bertsio berri izan dugu. 135 00:09:29,980 --> 00:09:32,400 Beraz, erabat gainidazten da. 136 00:09:32,400 --> 00:09:36,640 Horren ordez, erabiltzen dugu >> bada, fitxategia erantsi egingo. 137 00:09:36,640 --> 00:09:40,860 Orain, fitxategia irekitzean, inprimatutako bi aldiz gauza bera ikusiko dugu 138 00:09:40,860 --> 00:09:44,920 izan ez delako behin, eta gero erantsita jatorrizko dugu. 139 00:09:44,920 --> 00:09:48,130 Beraz, hori da> eta >> ez. 140 00:09:48,130 --> 00:09:50,580 Hurrengo bat ez du eskatu ez du galdetzeko. 141 00:09:50,580 --> 00:09:59,050 >> Dugula beste bat <, bada> out estandarra k birzuzentzen da, 142 00:09:59,050 --> 00:10:01,970 00:10:12,050 Ikus dezagun adibide bat dugu. 144 00:10:14,750 --> 00:10:16,930 Ko benetako azkar idatzi ahal izango dut. 145 00:10:17,870 --> 00:10:25,700 Dezagun edozein fitxategi, hello.c. 146 00:10:56,060 --> 00:10:59,070 Nahiko erraza den fitxategia. 147 00:10:59,070 --> 00:11:03,570 Kate bat besterik ez dut lortzean, eta, ondoren, "Hello" edozein katea sartu besterik ez dut izan zen inprimatzeko. 148 00:11:03,570 --> 00:11:07,990 Beraz, kaixo egin eta gero. / Kaixo. 149 00:11:07,990 --> 00:11:10,720 Orain me da galdetu zerbait sartu, 150 00:11:10,720 --> 00:11:15,070 Horrek esan nahi du, gauza on standard sartu sartu sartu zain 151 00:11:15,070 --> 00:11:20,450 Beraz, izena idatz estandarra sartu nahi dut ari gara sartu Kaixo, Rob esan nahi du! 152 00:11:20,450 --> 00:11:23,310 Ondoren, estandarra da Kaixo out inprimatzeko, Rob! 153 00:11:23,310 --> 00:11:28,860 Egiten dut. / Kaixo eta gero redirect bada, 154 00:11:30,740 --> 00:11:34,310 Oraingoz bakarrik egin dezakezu fitxategi batetik berbideraketa. 155 00:11:34,310 --> 00:11:41,720 Beraz, bada, fitxategi batzuk, txt jarri nintzen, eta Rob jarri dut, 156 00:11:41,720 --> 00:11:52,300 exekutatu I kaixo bada, eta, ondoren, fitxategi txt redirect sartu. / kaixo, Kaixo esateko, Rob da! berehala. 157 00:11:52,300 --> 00:11:57,160 Noiz GetString lehen aldiz lortzen eta estandarra da zain, 158 00:11:57,160 --> 00:12:01,730 estandarra ez da jada teklatua datuak sartu ahal izateko zain. 159 00:12:01,730 --> 00:12:05,980 Horren ordez, birbideratuko dugu estandar fitxategia txt irakurtzeko. 160 00:12:05,980 --> 00:12:10,290 Eta, beraz, txt fitxategia, besterik ez da line Rob irakurri da, 161 00:12:10,290 --> 00:12:13,380 eta, ondoren, Kaixo, Rob inprimatu! 162 00:12:13,380 --> 00:12:18,180 Eta nahi badut ere, ezin dut egin. / Kaixo 00:12:21,500 eta, ondoren, estandarra out da inprimatzeko, hau da, Kaixo, Rob! 164 00:12:21,500 --> 00:12:24,700 Hori redirect dut bere fitxategi propioan. 165 00:12:24,700 --> 00:12:29,790 Fitxategia deitu besterik ez dut kaixo - ez, ez dut, exekutagarri delako - txt2. 166 00:12:29,790 --> 00:12:40,150 Orain, txt2. / Kaixo 00:12:43,520 >> Zalantzak dituzu? 168 00:12:45,900 --> 00:12:49,090 >> Ongi da. Orduan hemen pipeline dugu. 169 00:12:49,090 --> 00:12:53,510 Tutuak berbideraketak azken unitatea dira. 170 00:12:53,510 --> 00:12:58,750 >> Oh. Berbideraketak unitatea ordez uste dut> 2 ez duzu> 171 00:12:58,750 --> 00:13:01,070 errore estandarra berbideratu. 172 00:13:01,070 --> 00:13:06,280 Beraz, bada zerbait errore estandarraren joan zen, litzateke ez txt2 sartu jarri. 173 00:13:06,280 --> 00:13:12,480 Baina konturatu egin behar dut> 2 bada, eta oraindik ere, Kaixo inprimatzea, Rob! komando-lerroa 174 00:13:12,480 --> 00:13:18,600 errore estandarraren berbideratu dut bakarrik, ez naiz estandarra berbideratu. 175 00:13:18,600 --> 00:13:22,210 Standard error and standard out desberdinak dira. 176 00:13:24,210 --> 00:13:27,080 Errore estandarraren benetan idatzi nahi duzun bada, 177 00:13:27,080 --> 00:13:35,080 ondoren, hau alda dezake I stderr fprintf izan. 178 00:13:35,080 --> 00:13:37,850 Beraz printf, default, standard out "bistaratzen du. 179 00:13:37,850 --> 00:13:41,720 Errore estandarraren inprimatu nahi dut eskuz bada, orduan fprintf erabili behar dut 180 00:13:41,720 --> 00:13:45,010 eta zehaztu zer inprimatu nahi dut. 181 00:13:45,010 --> 00:13:49,720 Fprintf stdout ordez egin badut, orduan funtsean baliokidea printf. 182 00:13:49,720 --> 00:13:55,530 Baina fprintf errore estandarra. 183 00:13:57,790 --> 00:14:03,650 Beraz, gaur egun, hau redirect I txt2 sartu, Hello, Rob! dago oraindik lortzean komando-lerroan inprimatutako 184 00:14:03,650 --> 00:14:08,270 du lortzean geroztik errore estandarraren inprimatu eta soilik dut estandarra berbideratu. 185 00:14:08,270 --> 00:14:16,420 I redirect standard error bada, gaur egun ez get inprimatua, eta txt2 Kaixo, Rob! 186 00:14:16,420 --> 00:14:21,910 Beraz, gaur egun, inprima dezakezu zure benetako erroreak errore estandarraren 187 00:14:21,910 --> 00:14:24,720 inprimatu eta zure erregularra mezuak standard out. 188 00:14:24,720 --> 00:14:31,420 Eta beraz, programa exekutatzen baduzu, exekutatu dezakezu. / Kaixo mota honetako 2> 189 00:14:31,420 --> 00:14:33,800 beraz, zure programa da normalean exekutatu 190 00:14:33,800 --> 00:14:38,400 baina lortu duzun edozein errore-mezuak geroago egiaztatu ahal error log, 191 00:14:38,400 --> 00:14:44,500 akatsak, beraz, eta, ondoren, begiratu geroago eta zure akatsak fitxategia akatsak gertatu dira. 192 00:14:45,200 --> 00:14:47,540 >> Zalantzak dituzu? 193 00:14:47,540 --> 00:14:58,070 >> (A) ren kanalizazioa, uste duzu estandarra ateratzen komando bat da 194 00:14:58,070 --> 00:15:01,210 eta, hurrengo agindua estandarra. 195 00:15:01,210 --> 00:15:05,570 Adibide bat hemen dago oihartzuna lortu du komando-lerroko gauza da 196 00:15:05,570 --> 00:15:11,840 hori besterik gabe, edozein dela ere bere argumentua gisa jarri I echo. Komatxorik ez dut jarri. 197 00:15:11,840 --> 00:15:16,150 Echo blah, blah, blah blah, blah, blah inprimatu. 198 00:15:16,150 --> 00:15:20,600 Aurretik, esan dut Rob txt fitxategi batean jarri behar izan nuen 199 00:15:20,600 --> 00:15:28,830 dudalako redirect txt fitxategiak, horren ordez, / Rob echo badut 200 00:15:28,830 --> 00:15:35,520 eta, ondoren, kanalizazioa egitea. / hello, izango dela ere egin gauza bera mota. 201 00:15:35,520 --> 00:15:39,160 Komando honen irteera, Rob oihartzuna hartzen ari da, 202 00:15:39,160 --> 00:15:43,610 eta sarrera gisa erabiliz. / kaixo. 203 00:15:44,790 --> 00:15:49,560 Dezakezu uste lehen redirect echo Rob fitxategi batean 204 00:15:49,560 --> 00:15:54,160 eta orduan. / kaixo fitxategi sarrera besterik ez zuten outputted. 205 00:15:54,160 --> 00:15:57,850 Baina aldi baterako fitxategia irudiaren hartzen du. 206 00:16:01,890 --> 00:16:04,460 >> Horri buruzko galderak? 207 00:16:04,460 --> 00:16:07,150 >> Hurrengo galdera hau inplikatzeko. 208 00:16:07,150 --> 00:16:15,310 Zer pipeline izeneko fitxategi bat names.txt izen berezia zenbakia erabili nahi duzun? 209 00:16:15,310 --> 00:16:24,160 Berezia da, eta, beraz, uniq, eta, ondoren, wc komandoak erabili nahi dugu. 210 00:16:24,160 --> 00:16:28,840 Man uniq egin dezakezu benetan zer egiten duen begiratu, 211 00:16:28,840 --> 00:16:34,840 eta besterik ez datozen lerroak aldameneko iragazi sarrera. 212 00:16:34,840 --> 00:16:40,690 Eta gizon wc newline, hitza, eta fitxategi bakoitzaren zenbatzen byte inprimatu. 213 00:16:40,690 --> 00:16:43,760 Eta azken bat sort erabili nahi dugu, hau da, 214 00:16:43,760 --> 00:16:47,410 den txt fitxategia lerro besterik ez ordenatzeko. 215 00:16:47,410 --> 00:16:58,080 Egiten dut txt fitxategia, names.txt bada, eta Rob, Tommy, Joseph, Tommy, Joseph, RJ, Rob da, 216 00:16:58,080 --> 00:17:03,910 hemen egin nahi dut fitxategi honetako izen berezia da zenbakia. 217 00:17:03,910 --> 00:17:08,750 Beraz, zer egin behar erantzuna izango ote da? >> [Ikasleak] 4. >> Bai. 218 00:17:08,750 --> 00:17:13,780 Izango 4 behar da noiztik Rob, Tommy, Joseph, RJ fitxategi honetan izenak soilik berezia dira. 219 00:17:13,780 --> 00:17:20,180 Lehen urratsa besterik ez dut hitz egiten bada Aldaketa names.txt 220 00:17:20,180 --> 00:17:24,290 hori benetan me kontatzen dena. 221 00:17:24,290 --> 00:17:32,560 Hau da, benetan inprimatzeko - Ikus dezagun, gizon wc - argumentu bat, hitzak, eta byte kopuruan. 222 00:17:32,560 --> 00:17:38,270 Dut lerro bakarrik badu zaintzeko, ondoren, besterik gabe, ez dut wc-l names.txt. 223 00:17:41,730 --> 00:17:44,300 Beraz, urrats 1. 224 00:17:44,300 --> 00:17:50,510 Baina ez dut wc-l names.txt nahi names.txt besterik ez duelako, izen guztiak, 225 00:17:50,510 --> 00:17:54,170 eta berezia ez dira edozein iragazi nahi dut. 226 00:17:54,170 --> 00:18:01,200 Beraz egin dut uniq names.txt, hori ez da nahiko eman nahi dudana 227 00:18:01,200 --> 00:18:03,760 bikoizturik izenak dira oraindik ere dagoelako. 228 00:18:03,760 --> 00:18:07,690 Zergatik da hori? Zergatik da uniq ez nahi dudana egiten? 229 00:18:07,690 --> 00:18:10,500 [Ikasleak] bikoiztuak ez dira [inaudible] >> Bai. 230 00:18:10,500 --> 00:18:16,370 Gogoratu man orria uniq dio iragazkiaren ondoko datozen lerroak. 231 00:18:16,370 --> 00:18:19,680 Oraindik ez dute aldamenean, beraz, ez da horietako iragazi. 232 00:18:19,680 --> 00:18:31,100 Ordenatzeko ditut lehen, sort names.txt bikoiztuak lerro guztiak jarri elkarrekin. 233 00:18:31,100 --> 00:18:34,450 Beraz, orain sort names.txt dela. 234 00:18:34,450 --> 00:18:40,550 Uniq | uniq, hau da, sarrera gisa erabiltzen duten nahi dut. 235 00:18:40,550 --> 00:18:43,390 Hau da, me Joseph, RJ, Rob, Tommy, 236 00:18:43,390 --> 00:18:49,260 eta hori wc-l sarrera gisa erabili nahi dut, 237 00:18:49,260 --> 00:18:52,740 den me emateko 4. 238 00:18:52,740 --> 00:18:56,930 Dio hemen bezala, zer pipeline erabili ahal izango duzu? 239 00:18:56,930 --> 00:19:01,390 Komando multzo bat erabiliz bezala gauza asko egin dezakezu 240 00:19:01,390 --> 00:19:05,130 non irteera erabiltzen duzun komando bat, hurrengo agindua sarrera gisa. 241 00:19:05,130 --> 00:19:08,780 Gauza asko,, clever gauza asko egin dezakezu. 242 00:19:08,780 --> 00:19:11,440 >> Zalantzak dituzu? 243 00:19:12,910 --> 00:19:14,600 Ongi da. 244 00:19:14,600 --> 00:19:17,880 Hori hodiak eta birbidalketa da. 245 00:19:18,370 --> 00:19:24,090 >> Orain dugu, benetako stuff, kodifikazioa stuff. 246 00:19:24,090 --> 00:19:29,100 PDF hau Inside, komando hau ikusiko duzu, 247 00:19:29,100 --> 00:19:32,950 eta komando hau exekutatu nahi zure tresnan duzu. 248 00:19:36,240 --> 00:19:42,250 wget komandoa da, funtsean, Interneten zerbait lortzean 249 00:19:42,250 --> 00:19:45,180 wget eta URL hau. 250 00:19:45,180 --> 00:19:49,110 URL honen joan, zure nabigatzailean bada, fitxategi hori deskargatu litzateke. 251 00:19:49,110 --> 00:19:52,510 Dut, bertan klik eginez,, beraz fitxategia deskargatu niretzat. 252 00:19:52,510 --> 00:19:55,650 Baina gauza wget terminalaren barruan idatziz 253 00:19:55,650 --> 00:19:58,620 besterik ez da zure terminal deskargatzeko. 254 00:19:58,620 --> 00:20:02,750 Section5.zip dut, eta nahi section5.zip deskonprimitu beharko duzu, 255 00:20:02,750 --> 00:20:06,520 hori emateko deitu section5 karpeta bat, 256 00:20:06,520 --> 00:20:11,550 den fitxategiak erabiltzen ari den gaur egun barruan goaz. 257 00:20:33,380 --> 00:20:37,710 Programa horiek 'fitxategi-izen gisa gomendatzen, buggy bit ari dira, 258 00:20:37,710 --> 00:20:40,990 beraz, zure zeregina da irudikatu zergatik gdb erabiliz. 259 00:20:40,990 --> 00:20:44,560 Ez du denek dute / kokapena daki nola horien kokapena 260 00:20:44,560 --> 00:20:47,480 beren-tresna da? Ongi da. 261 00:20:47,480 --> 00:20:56,400 >> ./buggy1 Carrera, segmentaziuo hutsegitea (core iraultzeko) esan du, 262 00:20:56,400 --> 00:21:00,500 eta une oro bat segfault lortuko duzu, gauza txarra da. 263 00:21:00,500 --> 00:21:03,810 Zer egoera pean ez segfault duzu? 264 00:21:03,810 --> 00:21:08,210 [Ikasleak] null erakuslea Dereferencing. >> Bai. Beraz, adibide bat da. 265 00:21:08,210 --> 00:21:11,580 Null erakuslea Dereferencing bat segfault lortzeko ari zaren. 266 00:21:11,580 --> 00:21:16,720 Zer da segfault bitartez memoria ari zaren ukitzen ez zenuke dela ukituko. 267 00:21:16,720 --> 00:21:21,350 Beraz, null erakuslea dereferencing helbidea 0 ukitu, 268 00:21:21,350 --> 00:21:28,060 eta, batez ere, ordenagailu guztietan, gaur egun esan helbidea 0 da, memoria ez da behar duzu ukitu. 269 00:21:28,060 --> 00:21:31,920 Beraz, zergatik bat segfault erakuslea null emaitzak dereferencing. 270 00:21:31,920 --> 00:21:37,210 Erakuslea ez hasieratu gertatuko gero, zabor-balioa du, 271 00:21:37,210 --> 00:21:41,520 eta, beraz, saiatu dereference duzu aukera guztiak, zu memoria ukitu 272 00:21:41,520 --> 00:21:43,540 ezerezaren erdian. 273 00:21:43,540 --> 00:21:45,650 Gertatuko zortea eta zabor-balioa 274 00:21:45,650 --> 00:21:48,440 gertatu nonbait seinalatu pila edo zerbait, 275 00:21:48,440 --> 00:21:50,820 orduan, erakuslea horrek ez duzu hasieratu dereference duzu, 276 00:21:50,820 --> 00:21:52,730 ez da ezer oker joan da. 277 00:21:52,730 --> 00:21:55,480 Baina, nahi izanez gero seinalatuz, esan, nonbait,, pila eta zeure artean, 278 00:21:55,480 --> 00:21:59,850 edo, besterik gabe, nonbait dela ez da zure programa erabiltzen da oraindik seinalatuz, 279 00:21:59,850 --> 00:22:02,240 ondoren, memoria ari zaren ukitzen ez behar duzu ukitu eta segfault duzu. 280 00:22:02,240 --> 00:22:06,370 Recursive funtzio bat idazten duzu, eta gehiegi aldiz recurses 281 00:22:06,370 --> 00:22:08,720 eta zure pila hazten handiegia da eta pila talka gauzak 282 00:22:08,720 --> 00:22:12,270 behar dela ez da talka, memoria ez zaren ukitu behar duzu ukitu, 283 00:22:12,270 --> 00:22:14,810 beraz segfault. 284 00:22:14,810 --> 00:22:17,010 Hau da bat segfault da. 285 00:22:17,010 --> 00:22:21,810 >> Gainera, arrazoi berberagatik kate bat bezala baduzu 286 00:22:21,810 --> 00:22:23,930 dezagun atzera jo aurreko programa. 287 00:22:23,930 --> 00:22:28,530 In hello.c-I'm besterik gabe, beste zerbait egin. 288 00:22:28,530 --> 00:22:33,770 char * s = "hello world!"; 289 00:22:33,770 --> 00:22:42,310 Erabiltzen dut * s = zerbait edo s [0] = 'X'; 290 00:22:42,310 --> 00:22:47,290 beraz, kaixo, / hello, zergatik hori segfault? 291 00:22:48,410 --> 00:22:51,250 Zergatik segfault? 292 00:22:55,660 --> 00:22:57,890 Zer gertatuko espero duzu? 293 00:22:57,890 --> 00:23:06,640 Nuen printf bada ("% s \ n", z); zer egingo inprimatu egingo espero duzu? 294 00:23:06,640 --> 00:23:09,930 [Ikasleen] X kaixo. >> Bai. 295 00:23:09,930 --> 00:23:15,140 Arazoa da hau atsegin kate bat aldarrikatu duzu, 296 00:23:15,140 --> 00:23:18,190 s erakuslea bat pilaketan joango da, 297 00:23:18,190 --> 00:23:25,880 eta zer da s seinalatuz irakurtzeko soilik memoria jasotako den katea da. 298 00:23:25,880 --> 00:23:30,560 Beraz, izena, irakurtzeko soilik memoria, ideia jaso behar duzu 299 00:23:30,560 --> 00:23:33,010 saiatu irakurtzeko soilik memoria aldatu nahi izanez gero, 300 00:23:33,010 --> 00:23:36,670 zerbait ez duzu memoria egiten ari zarenean eta segfault duzu. 301 00:23:36,670 --> 00:23:45,360 Char * s eta char s [] arteko diferentzia handi bat da, benetan. 302 00:23:45,360 --> 00:23:48,790 Horrela, char s [], gaur egun kate hau pila jarri, 303 00:23:48,790 --> 00:23:53,960 eta pila ez da irakurtzeko-bakarrik, eta horrek esan nahi du, hori ezin hobeto ondo funtzionatu behar luke. 304 00:23:55,500 --> 00:23:57,370 Eta egiten du. 305 00:23:57,370 --> 00:24:06,250 Gogoratu char egiten dut * s = "hello world!", S bera pilaketan 306 00:24:06,250 --> 00:24:10,390 baina beste nonbait puntu, eta beste nonbait gertatzen irakurtzeko bakarrik izan. 307 00:24:10,390 --> 00:24:15,640 Baina char s [] pilaren zerbait besterik ez da. 308 00:24:17,560 --> 00:24:21,760 Beraz, bat segfault gertatzen ari den beste adibide bat da. 309 00:24:21,760 --> 00:24:27,820 >> ./buggy1 Bat segfault ikusi dugu. 310 00:24:27,820 --> 00:24:31,810 Teorian, ez behar duzu buggy1.c at bilatzeko berehala. 311 00:24:31,810 --> 00:24:35,170 Horren ordez, bilatuko dugu gdb bidez. 312 00:24:35,170 --> 00:24:37,750 Jakinarazten segmentaziuo hutsegitea (core irauliko), 313 00:24:37,750 --> 00:24:40,850 Fitxategi hau core hemen izeneko gainean. 314 00:24:40,850 --> 00:24:45,200 Ls-l bada, ikus core ohi dela pretty big fitxategi bat dugu. 315 00:24:45,200 --> 00:24:51,580 Fitxategia byte kopurua da, beraz, 250-zerbait kilobyteko dirudienez. 316 00:24:51,580 --> 00:24:56,120 Horren arrazoia da zer esan core dump benetan 317 00:24:56,120 --> 00:25:01,410 zure programa bat kraskatzen denean, programaren memoria egoera 318 00:25:01,410 --> 00:25:05,230 besterik ez denean kopiatu eta fitxategi hau itsatsi. 319 00:25:05,230 --> 00:25:07,270 Fitxategi hori isurtzen denean. 320 00:25:07,270 --> 00:25:13,060 Programa honek, berriz, korrika, 250 kilobyteko memoria erabilera gertatu zen, 321 00:25:13,060 --> 00:25:17,040 eta, beraz, zer egin fitxategi hau isurtzen. 322 00:25:17,040 --> 00:25:23,630 Orain fitxategi hori begiratu dezakezu gdb buggy1 core bada egiten dugu. 323 00:25:23,630 --> 00:25:30,130 Gdb buggy1 besterik ez dugu egin daiteke, eta hori izango da martxan gdb aldian-aldian, 324 00:25:30,130 --> 00:25:33,800 buggy1 bere sarrera-fitxategi gisa erabiliz. 325 00:25:33,800 --> 00:25:38,260 Baina gdb buggy1 core ez bada, ondoren, zehazki, martxan gdb 326 00:25:38,260 --> 00:25:40,330 core fitxategia hartan. 327 00:25:40,330 --> 00:25:45,560 Eta esaten buggy1 bide gdb daki core fitxategi hori buggy1 programa dator. 328 00:25:45,560 --> 00:25:49,580 Beraz, gdb buggy1 core berehala ekarriko du 329 00:25:49,580 --> 00:25:52,060 non programa gertatu amaitzeko. 330 00:25:57,720 --> 00:26:02,340 Hemen ikusten dugu programa seinalea 11, segmentaziuo hutsegitea amaitu da. 331 00:26:02,340 --> 00:26:10,110 Muntaketa, ziurrenik ez da oso lagungarria lerro bat gertatuko dugu. 332 00:26:10,110 --> 00:26:15,360 Baina zuk idatzi bt edo backtrace bada, funtzioa izango da 333 00:26:15,360 --> 00:26:19,430 ematen digu gure pila uneko fotograma zerrenda. 334 00:26:19,430 --> 00:26:23,150 Beraz, backtrace. Bakarrik bi pila markoak dugu bezala dirudi. 335 00:26:23,150 --> 00:26:26,310 Lehenengo eta behin, gure pila marko nagusia da, 336 00:26:26,310 --> 00:26:29,810 eta bigarrena, funtzio hau izango gertatuko dugun markoa pila da, 337 00:26:29,810 --> 00:26:34,440 bakarrik begiratzen dugu bezala muntaia kodea. 338 00:26:34,440 --> 00:26:38,050 Beraz, dezagun atzera jo, gure funtzio nagusia, 339 00:26:38,050 --> 00:26:42,300 eta marko 1 dugu egin daiteke, eta ere egin ahal dugu behera uste dut, 340 00:26:42,300 --> 00:26:45,160 baina inoiz ez ia, ez dut behera - edo. Bai. 341 00:26:45,160 --> 00:26:50,710 Eta Gora behera. Up, pila fotograma bat ekartzen hasi behar duzu, behera eramango zaitu pila fotograma bat. 342 00:26:50,710 --> 00:26:53,240 Inoiz ez hori erabili ohi dut. 343 00:26:53,240 --> 00:26:59,120 Zehazki, besterik ez dut esaten den frame 1, etiketatu 1 markoa joan. 344 00:26:59,120 --> 00:27:01,750 Frame 1 gurekin ekartzea pila nagusiak marko batean, 345 00:27:01,750 --> 00:27:05,570 eta hemen dio kode lerro izango gertatuko dugu. 346 00:27:05,570 --> 00:27:07,950 Nahi izan dugu kode lerro pare bat gehiago bada, zerrenda esan dezakegu, 347 00:27:07,950 --> 00:27:11,280 eta hori ezagutzera emango kode lerro guztiak bere inguruan. 348 00:27:11,280 --> 00:27:13,360 Lerroan segfaulted dugu 6 zen: 349 00:27:13,360 --> 00:27:17,360 if (strcmp ("CS50 arroka", argv [1]) == 0). 350 00:27:17,360 --> 00:27:24,130 Begi-bistakoa da, ez bada oraindik, lortu ahal izango duzu zuzenean hemen zergatik segfaulted pentsatzen. 351 00:27:24,130 --> 00:27:28,800 Hala ere, hartu ahal izango dugu urrats bat gehiago eta esatea, "Zergatik argv [1] segfault?" 352 00:27:28,800 --> 00:27:38,830 Dezagun inprimatu argv [1], eta bere 0x0, null erakuslea da itxura bezala. 353 00:27:38,830 --> 00:27:44,750 CS50 arroka eta null strcmping ari gara, eta, beraz, hori segfault. 354 00:27:44,750 --> 00:27:48,280 Eta zergatik da, argv [1] null? 355 00:27:48,640 --> 00:27:51,280 [Ikasleen] ez ez dugulako eman komando-lerroko argumentuak edozein. 356 00:27:51,280 --> 00:27:53,390 Bai. Ez dugu eman komando-lerroko argumentuak edozein. 357 00:27:53,390 --> 00:27:58,460 Beraz ./buggy1 argv [0] izan ./buggy1. 358 00:27:58,460 --> 00:28:02,100 Ez da argv bat [1], segfault joan, beraz. 359 00:28:02,100 --> 00:28:07,450 Baina, horren ordez, ze CS50 egin behar dut, D bat esan joan 360 00:28:07,450 --> 00:28:09,950 hori zer egin behar delako. 361 00:28:09,950 --> 00:28:15,240 . Buggy1.c begira, ustezko inprimatu "D bat lortu ahal izango dituzu" 362 00:28:15,240 --> 00:28:20,820 Argv [1] bada, ez da "CS50 arroka", "D bat lortu ahal izango dituzu", bestela "A lortu ahal izango dituzu!" 363 00:28:20,820 --> 00:28:25,660 Beraz, bada bat nahi dugu, hau egia gisa alderatu behar dugu, 364 00:28:25,660 --> 00:28:28,710 Horrek esan nahi du: 0 konparatzen. 365 00:28:28,710 --> 00:28:31,100 Beraz, argv [1] "CS50 arroka" izan behar da. 366 00:28:31,100 --> 00:28:35,660 Nahi duzun komando-lerroan bada, \ erabili espazioa ihes egin behar duzu. 367 00:28:35,660 --> 00:28:41,690 Beraz CS50 \ arroka eta ez duzu bat! 368 00:28:41,690 --> 00:28:44,060 Egin ez baduzu backslash, zergatik ez da lan? 369 00:28:44,060 --> 00:28:47,190 [Ikasleak] bi argumentuak da. >> Bai. 370 00:28:47,190 --> 00:28:52,540 Argv [1] CS50 izango da, eta argv [2] arroka izango da. Ongi da. 371 00:28:52,540 --> 00:28:56,470 >> Orain ./buggy2 berriro segfault. 372 00:28:56,470 --> 00:29:01,880 Bere core fitxategia irekitzean ordez, besterik ez dugu ireki buggy2 zuzenean 373 00:29:01,880 --> 00:29:05,000 gdb buggy2 beraz. 374 00:29:05,000 --> 00:29:09,590 Orain gure programa besterik ez dugu exekutatu bada, gero Programan jasotako seinalea SIGSEGV esan nahi du joan 375 00:29:09,590 --> 00:29:15,530 segfault den seinale, eta hau da, non gertatuko gertatu da. 376 00:29:15,530 --> 00:29:21,250 Gure backtrace begira, funtzio oh_no ginen ikusiko dugu, 377 00:29:21,250 --> 00:29:23,900 funtzioa dinky izan zen, funtzio binky deitu deitu zen, 378 00:29:23,900 --> 00:29:26,460 izan zen nagusia deituta. 379 00:29:26,460 --> 00:29:31,680 Argumentuak ere ikus ahal izango ditugu, funtzio horiek. 380 00:29:31,680 --> 00:29:34,680 Argumentua dinky eta binky 1 izan zen. 381 00:29:34,680 --> 00:29:44,390 Zerrendara funtzioa oh_no oh_no besterik ez da char ** s = NULL egiten bada, ikusiko dugu; 382 00:29:44,390 --> 00:29:47,410 * S = "BOOM"; 383 00:29:47,410 --> 00:29:50,330 Zergatik huts egin? 384 00:29:54,330 --> 00:29:58,380 [Ikasleen] ezin duzu dereference null erakuslea? >> Bai. 385 00:29:58,380 --> 00:30:06,090 Hau besterik ez da NULL da s esaten, edozein izanik ere gertatzen den char ** bat izan nahi izanez gero, 386 00:30:06,090 --> 00:30:12,070 duen, nola interpretatu duzun arabera, kate erakuslea erakuslea izan zitekeen 387 00:30:12,070 --> 00:30:15,550 edo kateen array bat. 388 00:30:15,550 --> 00:30:21,430 NULL s da, eta, beraz, * s null erakuslea da dereferencing 389 00:30:21,430 --> 00:30:24,800 eta, beraz, hau da huts egingo. 390 00:30:24,800 --> 00:30:27,540 Ziurrenik dezakezu segfault modurik azkarrena bat da. 391 00:30:27,540 --> 00:30:31,300 Null erakuslea besterik ez da geratuko eta berehala segfaulting. 392 00:30:31,300 --> 00:30:34,570 Horixe oh_no egiten ari da. 393 00:30:34,570 --> 00:30:43,400 Joaten gara, bada, fotograma bat, eta gero izeneko funtzioa oh_no sartu dugu. 394 00:30:43,400 --> 00:30:44,830 Horretarako behera behar dut. 395 00:30:44,830 --> 00:30:48,610 Ez baduzu, idatzi komando bat eta sakatu besterik ez duzu Sartu berriro, 396 00:30:48,610 --> 00:30:52,350 errepikatu egingo da, aurreko komandoa exekutatu duzun besterik ez. 397 00:30:52,350 --> 00:30:56,610 Hauek dira: 1. Fotograman dugu. 398 00:30:56,610 --> 00:31:04,650 Fotograma honetan zerrenda, hemen gure funtzioa ikusiko dugu. 399 00:31:04,650 --> 00:31:08,520 Zerrenda hit dezakezu berriro, edo zerrenda 20 egin ahal izango duzu eta gehiago zerrendatuko dira. 400 00:31:08,520 --> 00:31:13,640 Funtzioak-i 1 bada dinky dio, ondoren oh_no funtzioa joan 401 00:31:13,640 --> 00:31:15,960 bestela funtzioa slinky joan. 402 00:31:15,960 --> 00:31:18,700 Eta 1 i gertatuko dugu hemen ikusteko delako ezagutzen dugun 403 00:31:18,700 --> 00:31:22,560 1 argumentua deitu dinky zela. 404 00:31:22,560 --> 00:31:27,560 Edo, besterik gabe dezakezu i inprimatu ez eta esan 1 i izango da. 405 00:31:27,560 --> 00:31:33,770 Ari gara dinky, eta gara beste marko bati, amaitzeko sortu dugu binky dakigu. 406 00:31:33,770 --> 00:31:36,600 Up. Oraindik orain binky dugu. 407 00:31:36,600 --> 00:31:41,340 Erdia moztu me aurretik off zerrenda - funtzio hau zerrenda - 408 00:31:41,340 --> 00:31:52,670 off balitz bezala hasi da 0 da i, eta gero deitu du oh_no goaz, bestela deitu dinky. 409 00:31:52,670 --> 00:31:57,000 1 i ezagutzen dugu, beraz, dinky deitu. 410 00:31:57,000 --> 00:32:05,030 Eta orain itzuli gara nagusian, eta nagusia int i = RAND ()% 3 besterik ez da izango; 411 00:32:05,030 --> 00:32:08,790 Hori besterik ez da ausazko zenbaki bat eman nahi zaio, hau da, bai 0, 1 edo 2. 412 00:32:08,790 --> 00:32:12,780 , Deitu zenbaki hori binky da, eta 0 itzuliko da. 413 00:32:12,780 --> 00:32:16,700 Begira, 414 00:32:16,700 --> 00:32:19,880 programaren bidez eskuz exekutatzen ari berehala gabe oinez, 415 00:32:19,880 --> 00:32:25,400 nagusian break puntu bat ezarri nahi duzun, eta horrek esan nahi du programa 416 00:32:25,400 --> 00:32:31,020 zure programa exekutatzen hits break puntu bat arte. 417 00:32:31,020 --> 00:32:35,450 Programa exekutatzen ari Beraz, exekutatu izango da eta, ondoren, funtzio nagusia kolpatu du, eta gelditzeko exekutatzen ari. 418 00:32:35,450 --> 00:32:44,700 Oraindik nagusien barruan dugu, eta urrats edo hurrengo ekartzea hurrengo kode lerro. 419 00:32:44,700 --> 00:32:47,050 Urratsa edo hurrengo egin dezakezu. 420 00:32:47,050 --> 00:32:51,800 Hurrengo ukitzean, i izan aus ()% 3, beraz, i balioa inprimatu ahal izango dugu, 421 00:32:51,800 --> 00:32:55,280 eta esan 1 i izango da. 422 00:32:55,280 --> 00:32:58,110 Orain materia erabiltzen den ala ez edo hurrengo urratsa egingo du. 423 00:32:58,110 --> 00:33:01,000 Garrantzia aurreko batean, uste dut, baina hurrengo erabili nahi genuke. 424 00:33:01,000 --> 00:33:06,000 Urratsa erabiltzen dugu gero, funtzio sartu dugu, benetako gauza begirada esan nahi du 425 00:33:06,000 --> 00:33:07,940 binky barruan gertatzen. 426 00:33:07,940 --> 00:33:10,510 Erabiliko dugu hurrengo bada, orduan joan funtzioa esan nahi du 427 00:33:10,510 --> 00:33:14,070 eta, besterik gabe, gure funtzio nagusia kodea hurrengo lerroan joan. 428 00:33:14,070 --> 00:33:17,900 Eskuin hemen lerro hau izan zen, non aus ()% 3 esan nuen; 429 00:33:17,900 --> 00:33:21,320 nuen urratsa bada, aus ezartzea litzateke joan 430 00:33:21,320 --> 00:33:25,110 eta zer ez dago gertatzen ari begiratu, eta aus funtzio bidez izan dut urratsa. 431 00:33:25,110 --> 00:33:26,920 Baina ez dut aus funtzioa buruzko zaintzeko. 432 00:33:26,920 --> 00:33:30,190 Nahi dut hurrengo kode lerro nagusian, beraz, hurrengo erabiltzen dut. 433 00:33:30,190 --> 00:33:35,800 Baina orain arreta do I binky funtzioa, beraz, horretan urratsa egin nahi dut. 434 00:33:35,800 --> 00:33:37,730 Orain nago binky dut. 435 00:33:37,730 --> 00:33:42,040 Kodea lehen lerroa (i == 0), urrats bat hartzen bada esan nahi du, 436 00:33:42,040 --> 00:33:44,930 amaituko dugu dinky ikusiko dugu. 437 00:33:44,930 --> 00:33:51,620 Gauza dugu zerrenda, checked gero ikusiko dugu, i = 0. 438 00:33:51,620 --> 00:33:55,470 ez da i 0 berdinak, beraz, joan, bestela, baldintza 439 00:33:55,470 --> 00:33:59,540 den dinky (i) deitu behar da. 440 00:33:59,540 --> 00:34:04,030 Nahastu egin daitezke. 441 00:34:04,030 --> 00:34:07,380 Besterik ez duzu lerro hauen bada begiratu zuzenean, uste duzu (i == 0) bada, 442 00:34:07,380 --> 00:34:10,800 ados, eta gero beste urrats bat hartu nuen eta gaur egun naiz dinky (i) I 443 00:34:10,800 --> 00:34:14,120 uste 0 = i edo zerbait esan nahi behar duzu. 444 00:34:14,120 --> 00:34:18,980 N º besterik ez du esan nahi zuzenean itsasten line dinky (i) badaki hori. 445 00:34:18,980 --> 00:34:23,300 I ez delako 0, hurrengo urratsa da, eta ez beste amaitzeko. 446 00:34:23,300 --> 00:34:26,239 Bestela, ez da lerro bat gelditzeko. 447 00:34:26,239 --> 00:34:31,570 Besterik ez da, hurrengo lerroan benetan exekutatu ahal izango da, hau da, dinky (i) joango gara. 448 00:34:31,570 --> 00:34:36,090 Dinky (i) sartu hurrats, ikusten dugun (i == 1). 449 00:34:36,090 --> 00:34:42,670 Badakit ez = 1, eta, beraz, noiz zapaldu dugu, amaitzeko oh_no goaz badakigu 450 00:34:42,670 --> 00:34:46,489 = 1 i funtzioa oh_no, urratsa dezakezu sartu delako dei egiten du, 451 00:34:46,489 --> 00:34:52,969 ezarri char ** s = NULL berehala eta "BOOM". 452 00:34:54,270 --> 00:34:59,690 Eta gero, benetan buggy2 ezartzeko begira, 453 00:34:59,690 --> 00:35:04,590 0, 1 edo 2 - deituz binky, hau da, besterik ez da i ausazko zenbaki bat lortzeko 454 00:35:04,590 --> 00:35:10,610 hau da, i 0 bada oh_no deiak, bestela dinky deiak, datorren hemen. 455 00:35:10,610 --> 00:35:18,100 I 1 bada, dei oh_no, bestela deitu slinky, datozen hemen, 456 00:35:18,100 --> 00:35:20,460 i 2 izanez gero, deitu oh_no. 457 00:35:20,460 --> 00:35:24,720 Ez dut uste modu bat da - 458 00:35:24,720 --> 00:35:30,030 Does Edozeinek ikus programa hori ez segfault egiteko modu bat? 459 00:35:30,030 --> 00:35:37,530 Dut zerbait falta ezean, i 0 bada delako, berehala dituzu segfault 460 00:35:37,530 --> 00:35:41,250 bestela, joan den funtzio bat da i 1 baduzu segfault 461 00:35:41,250 --> 00:35:44,540 bestela, joan funtzio bat bada i 2 segfault duzu. 462 00:35:44,540 --> 00:35:46,810 Ez dio axola zer egin nahi duzu Beraz, segfault. 463 00:35:46,810 --> 00:35:52,380 >> Char ** s = NULL ordez egitea izango litzateke, konpontzen modu bat asmatzen dut, 464 00:35:52,380 --> 00:35:55,610 espazio malloc katea. 465 00:35:55,610 --> 00:36:04,230 Sizeof zer - malloc (sizeof) egin izan dugu? 466 00:36:09,910 --> 00:36:15,190 [Ikasleak] (char) * 5? >> Ba al dirudi ezta? 467 00:36:15,190 --> 00:36:21,060 Hau benetan I ran bada lan egingo dut suposatuz, baina ez da zer bila nabil. 468 00:36:24,400 --> 00:36:32,940 S mota behatu. Dezagun int * gehitu eta, beraz, int * x. 469 00:36:32,940 --> 00:36:35,600 Malloc egin nahi dut (sizeof (int)). 470 00:36:35,600 --> 00:36:40,490 Edo I 5 array bat nahi izanez gero, egin (sizeof (int) * 5) nuke; 471 00:36:40,490 --> 00:36:44,210 Zer badut int ** bat? 472 00:36:46,260 --> 00:36:49,140 Zer izango litzateke I malloc? 473 00:36:49,140 --> 00:36:53,510 [Ikasleak] erakuslearen tamaina. >> Bai. (Sizeof (int *)); 474 00:36:53,510 --> 00:36:56,960 Same behera hemen gauza. 475 00:36:56,960 --> 00:37:01,280 (Sizeof (char *)) nahi dut; 476 00:37:06,170 --> 00:37:12,840 Hau da lekua esleitu erakuslea "BOOM" dela adierazi du. 477 00:37:12,840 --> 00:37:15,330 Ez dut behar lekua esleitu "BOOM" bera 478 00:37:15,330 --> 00:37:17,210 hau da, funtsean, zer aurretik esan dut baliokidea delako 479 00:37:17,210 --> 00:37:20,870 char * x = "BOOM". 480 00:37:20,870 --> 00:37:27,950 "BOOM" badago lehendik ere. Existitzeko gertatzen da memoria eskualdea irakurtzeko soilik. 481 00:37:27,950 --> 00:37:35,200 Baina lehendik egongo da, eta kode-lerro horrek esan nahi du, s char ** 482 00:37:35,200 --> 00:37:43,900 * s char * bat da, eta char * ari zaren "BOOM" seinalatu. 483 00:37:43,900 --> 00:37:50,040 Nahi dut "BOOM" s kopiatzeko bada, orduan s lekua esleitu beharko nuke. 484 00:37:55,170 --> 00:38:03,900 Egin dut * s = malloc (sizeof (char) * 5); 485 00:38:03,900 --> 00:38:06,210 Zergatik 5? 486 00:38:06,210 --> 00:38:10,860 Zergatik ez 4? Badirudi "BOOM" 4 karaktere bezalakoa da. >> [Ikasleak] null karakterea. 487 00:38:10,860 --> 00:38:14,580 Bai. Zure kateak guztiak null karaktere behar dira. 488 00:38:14,580 --> 00:38:23,590 Orain zerbait egin ahal izango dut strcat bezala - Zer da kate bat kopiatzeko funtzioa? 489 00:38:23,590 --> 00:38:28,520 [Ikasleen] cpy? >> Strcpy. 490 00:38:28,520 --> 00:38:32,700 man strcpy. 491 00:38:36,120 --> 00:38:39,590 Beraz strcpy edo strncpy. 492 00:38:39,590 --> 00:38:43,410 strncpy da pixka bat seguruago zehaztu dezakezu geroztik zehazki zenbat karaktere, 493 00:38:43,410 --> 00:38:46,190 baina hemen ez du axola ezagutzen dugulako. 494 00:38:46,190 --> 00:38:50,340 Beraz strcpy eta argumentuak bilatzeko. 495 00:38:50,340 --> 00:38:53,100 Lehen argumentua gure helmuga da. 496 00:38:53,100 --> 00:38:56,770 Bigarren argumentua gure iturri da. 497 00:38:56,770 --> 00:39:10,310 Gure helmuga * kopiatu ari gara "BOOM" erakuslea s. 498 00:39:10,310 --> 00:39:19,820 Zergatik izan liteke hori egin ordez besterik ez genuen strcpy aurretik nahi duzu 499 00:39:19,820 --> 00:39:22,800 * s = "BOOM"? 500 00:39:22,800 --> 00:39:28,630 Hau egin nahi duzun arrazoi bat da, baina zer da hori arrazoia? 501 00:39:28,630 --> 00:39:31,940 [Ikasleen] "BOOM" zerbait aldatu nahi baduzu. >> Bai. 502 00:39:31,940 --> 00:39:37,950 Orain s antzeko zerbait egin ahal izango dut [0] = 'X'; 503 00:39:37,950 --> 00:39:48,190 s puntu zeure eta zeure buruzko espazioa hori delako s da seinalatuz 504 00:39:48,190 --> 00:39:52,320 , zeure, "BOOM" gordetzeko leku gehiago erakuslea da. 505 00:39:52,320 --> 00:39:55,150 Beraz, "BOOM" kopia zeure en gordetzen ari da. 506 00:39:55,150 --> 00:39:58,780 Teknikoki "BOOM" gure programa bi kopia daude. 507 00:39:58,780 --> 00:40:03,500 Lehen bat besterik ez "BOOM" kate etengabea ematen da, 508 00:40:03,500 --> 00:40:09,250 "BOOM" bigarren kopia, strcpy "BOOM" kopia sortu. 509 00:40:09,250 --> 00:40:13,100 Baina "BOOM" kopia zeure e gordetzen dira, eta zeure aldatu free Oraindik duzu. 510 00:40:13,100 --> 00:40:17,250 Zeure ez da irakurtzeko-bakarrik, eta, beraz, horrek esan nahi du s [0] 511 00:40:17,250 --> 00:40:20,500 "BOOM" balioa aldatzeko dizu. 512 00:40:20,500 --> 00:40:23,130 Karaktere horiek aldatzeko dizu. 513 00:40:23,130 --> 00:40:26,640 >> Zalantzak dituzu? 514 00:40:27,740 --> 00:40:29,290 Ongi da. 515 00:40:29,290 --> 00:40:35,500 >> Eramatean. Buggy3, let gdb buggy3. 516 00:40:35,500 --> 00:40:39,840 Exekutatu besterik ez dugu, eta bat segfault vemos. 517 00:40:39,840 --> 00:40:46,550 Dugu backtrace bada, ez dira soilik bi funtzioak. 518 00:40:46,550 --> 00:40:52,970 Gara, bada, gure eginkizun nagusia bihurtu, lerro hau segfaulted dugun ikusiko dugu. 519 00:40:52,970 --> 00:41:00,180 Beraz, lerro hau begira, (int line = 0; fgets stuff honetan ez berdinak NULL du; 520 00:41:00,180 --> 00:41:03,770 line + +). 521 00:41:03,770 --> 00:41:08,010 Gure aurreko fotograma _IO_fgets deitzen zen. 522 00:41:08,010 --> 00:41:10,720 Eraikitako-in C funtzio asko ikusi duzu 523 00:41:10,720 --> 00:41:15,350 denean segfault lortuko duzu, ez dago benetan críptica funtzioa izenak izango da 524 00:41:15,350 --> 00:41:18,090 _IO_fgets hau atsegin dute. 525 00:41:18,090 --> 00:41:21,770 Baina hori fgets deialdi hau. 526 00:41:21,770 --> 00:41:25,850 Somewhere hemen barruan, segfaulting ari gara. 527 00:41:25,850 --> 00:41:30,340 Argumentuak begiratzen badiogu, fgets buffer inprimatu ahal izango dugu. 528 00:41:30,340 --> 00:41:41,180 Dezagun inprimatu - Oh, ez. 529 00:41:48,980 --> 00:41:51,900 Inprimatu ez da zehazki da nahi dudan bezala lan egiteko. 530 00:41:55,460 --> 00:41:58,000 Dezagun benetako programa begiratu. 531 00:42:02,200 --> 00:42:09,640 Buffer karaktere array bat da. 128 karaktere array pertsonaia bat da. 532 00:42:09,640 --> 00:42:14,980 Beraz, inprimatu buffer diot, 128 karaktere horiek inprimatu egingo da, 533 00:42:14,980 --> 00:42:18,300 I guess da, zer espero da. 534 00:42:18,300 --> 00:42:21,390 Zer bila nenbilen inprimatu buffer helbidea, 535 00:42:21,390 --> 00:42:23,680 baina horrek ez du benetan tell me askoz. 536 00:42:23,680 --> 00:42:30,770 Beraz, esan nahi hemen x buffer gertatuko I, me erakusten du 0xbffff090 537 00:42:30,770 --> 00:42:38,690 Izan ere,, lehenago edo uneren gogoratzen bada, Oxbffff pila-ish eskualde bat izan ohi da. 538 00:42:38,690 --> 00:42:46,020 Pila joera nonbait hasteko 0xc000 pean. 539 00:42:46,020 --> 00:42:51,890 Helbide honetan ikusi, buffer pila gertatzen hori ezagutzen dut. 540 00:42:51,890 --> 00:43:04,500 Nire programa berrabiarazten, korrika egin, sortu, bufferreko karaktere-sekuentzia hau ikusi genuen 541 00:43:04,500 --> 00:43:06,530 diren pretty askoz zentzugabeak. 542 00:43:06,530 --> 00:43:12,270 Ondoren fitxategia inprimatzean, zer ez fitxategi itxura? 543 00:43:15,120 --> 00:43:17,310 [Ikasleen] Null. >> Bai. 544 00:43:17,310 --> 00:43:22,610 File mota FITXATEGIA * bat da, beraz, erakuslea da, 545 00:43:22,610 --> 00:43:26,610 eta erakuslea duten balioa nulua da. 546 00:43:26,610 --> 00:43:33,240 Beraz fgets erakuslea hori irakurri zeharkako modu batean saiatu, 547 00:43:33,240 --> 00:43:37,320 baina horretarako erakuslea horretara sartzeko, dereference da. 548 00:43:37,320 --> 00:43:40,550 Edo, zer da, dereferences da behar seinalatuz sartzeko. 549 00:43:40,550 --> 00:43:43,810 Beraz, null erakuslea eta segfaults da dereferencing. 550 00:43:46,600 --> 00:43:48,730 Berrabiarazi nuen han. 551 00:43:48,730 --> 00:43:52,170 Dugu gure puntu nagusietako bat apurtzen bada eta exekutatu, 552 00:43:52,170 --> 00:43:57,320 kodea lehen lerroa char * filename = "nonexistent.txt" da; 553 00:43:57,320 --> 00:44:00,870 Pretty big aholkua eman behar zergatik programa hau huts. 554 00:44:00,870 --> 00:44:06,080 Hurrengo Idazketa ekartzen dit hurrengo lerroan, non fitxategi hau irekitzeko, 555 00:44:06,080 --> 00:44:11,140 eta, ondoren, berehala gure line, non behin, hurrengo hit I sartu dut, segfault dute. 556 00:44:11,140 --> 00:44:16,880 Does Edozeinek nahi botatzeko arrazoia zergatik segfaulting egongo gara agian? 557 00:44:16,880 --> 00:44:19,130 [Ikasleak] Fitxategia ez da existitzen. >> Bai. 558 00:44:19,130 --> 00:44:22,250 Iradokizun bat izan da ustezko 559 00:44:22,250 --> 00:44:29,570 betiere, fitxategi batean irekitzeko ari zaren fitxategiaren benetan existitzen dela egiaztatu behar duzu. 560 00:44:29,570 --> 00:44:31,510 Beraz, hemen, "nonexistent.txt"; 561 00:44:31,510 --> 00:44:34,700 Dugunean fopen irakurtzeko izen, esan behar dugu 562 00:44:34,700 --> 00:44:45,870 (file == NULL) eta esan printf ("Fitxategia ez da existitzen!" 563 00:44:45,870 --> 00:44:56,340 edo hobeto oraindik filename); bueltan 1; 564 00:44:56,340 --> 00:45:00,300 Beraz, orain da NULL izanez gero, egiaztatu dugu 565 00:45:00,300 --> 00:45:03,930 benetan aurretik eta etengabeko fitxategi hori irakurri nahian. 566 00:45:03,930 --> 00:45:08,800 Remake bat dugu besterik ez da obra hori ikusteko. 567 00:45:11,020 --> 00:45:14,970 Lerro berri bat sartzeko asmoa dut. 568 00:45:21,090 --> 00:45:25,290 Beraz, gaur egun nonexistent.txt ez da existitzen. 569 00:45:26,890 --> 00:45:30,040 Beti behar duzu gauza sort hori egiaztatzeko. 570 00:45:30,040 --> 00:45:33,870 Egiaztatu beharko zenuke beti. Fopen NULL itzultzen bada ikusteko. 571 00:45:33,870 --> 00:45:38,170 Egiaztatu beharko zenuke beti. Malloc ez itzultzeko NULL, 572 00:45:38,170 --> 00:45:41,410 edo, bestela, segfault. 573 00:45:42,200 --> 00:45:45,930 >> Orain buggy4.c. 574 00:45:49,190 --> 00:45:58,440 Carrera. Asmatzeko dut sarrerako edo begizta ziurrenik infinitua zain. 575 00:45:58,440 --> 00:46:01,870 Bai, begizta infinitua da. 576 00:46:01,870 --> 00:46:05,560 Buggy4 Beraz. Oraindik begizta infinitua itxura. 577 00:46:05,560 --> 00:46:12,590 Nagusiak hautsi ahal izango dugu, gure programa exekutatu. 578 00:46:12,590 --> 00:46:20,180 Gdb, betiere, laburdura erabili da, zalantzarik gabe, 579 00:46:20,180 --> 00:46:23,420 edo laburdurak berezia dela ematen dute, 580 00:46:23,420 --> 00:46:29,020 ondoren n erabili ahal izango dituzu, hurrengo erabili ordez hurrengo modu guztiak idatzi beharrik. 581 00:46:29,020 --> 00:46:33,730 Eta orain ditudan hit n behin, besterik I sakatu Sartu hurrengo jarraitzeko 582 00:46:33,730 --> 00:46:36,640 n sakatu Sartu, n Sartu, n Sartu beharrik ordez. 583 00:46:36,640 --> 00:46:44,630 Badirudi nolabaiteko naiz bezala begizta array ezartzen den [i] eta 0. 584 00:46:44,630 --> 00:46:50,510 Am I like inoiz ez out hautsi begizta honen dirudi. 585 00:46:50,510 --> 00:46:54,780 Inprimatu I i bada, beraz, 2 da i, eta, ondoren, hurrengo dut. 586 00:46:54,780 --> 00:46:59,250 I inprimatu dut, 3 i, ondoren, hurrengo dut. 587 00:46:59,250 --> 00:47:05,360 I inprimatu dut eta 3 i. Ondoren, inprimatu i, 4 i. 588 00:47:05,360 --> 00:47:14,520 Egia esan, inprimatu sizeof (array), beraz, array tamaina 20 da. 589 00:47:16,310 --> 00:47:32,870 Baina ez gdb komando berezi batzuk bezala zerbait arte gertatzen! Begira. 590 00:47:32,870 --> 00:47:37,620 Aldagaiaren balioa baldintza bat ezartzea bezala da. Baina ez dut gogoratzen zer den. 591 00:47:37,620 --> 00:47:44,100 Beraz, bada mantendu dugu 592 00:47:44,100 --> 00:47:47,120 Zer diozu? Zer egin ekarri duzu? 593 00:47:47,120 --> 00:47:50,500 [Ikasleak] Does erakutsi i gehitu - >> Bai. Beraz, laguntza erakutsi ahal i. 594 00:47:50,500 --> 00:47:54,530 Besterik ez dugu erakutsi i bada, jarri izango da hemen zein i balioa da 595 00:47:54,530 --> 00:47:56,470 beraz, ez dut aldi bakoitzean inprimatzeko. 596 00:47:56,470 --> 00:48:02,930 Besterik ez dugu hurrengo mantentzeko bada joan, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 ikusiko dugu. 597 00:48:02,930 --> 00:48:08,530 Zerbait izugarri oker joan da, eta ari da i 0 berrezartzeko. 598 00:48:13,330 --> 00:48:22,220 - Buggy4.c begira, guztietan gertatzen den array int [5] ikusiko dugu; 599 00:48:22,220 --> 00:48:26,200 (; i <= sizeof (array); i + + i = 0). 600 00:48:26,200 --> 00:48:28,550 array [i] = 0; 601 00:48:28,550 --> 00:48:31,390 Zer da hori, oker hemen ikusten dugu? 602 00:48:31,390 --> 00:48:39,480 Iradokizun bat bezala, gdb buggy4 egiten zen I - dezagun apurtu nagusia, run 603 00:48:39,480 --> 00:48:45,980 Inprimatu sizeof (array) nuen zer baldintza da, non, azkenik, hautsi izarrekin behar dut ikusteko. 604 00:48:47,690 --> 00:48:51,100 Non nago? Ba al dut exekutatu? 605 00:48:51,100 --> 00:48:54,280 Nik ez dut oraindik deklaratzeko. 606 00:48:54,280 --> 00:48:58,680 Beraz inprimatu sizeof (array), eta hori 20. 607 00:48:58,680 --> 00:49:06,690 espero da, nire array tamaina 5 eta 5 zenbaki osoen 608 00:49:06,690 --> 00:49:12,410 beraz, gauza osoa 5 * sizeof (int) byte izan beharko luke, non sizeof (int) joera 4an. 609 00:49:12,410 --> 00:49:14,780 Beraz, sizeof (array) 20. 610 00:49:14,780 --> 00:49:17,420 Zer egin behar izan? 611 00:49:17,420 --> 00:49:21,720 [Ikasleak] sizeof (int) arabera banatzen da. >> Bai, / sizeof (int). 612 00:49:21,720 --> 00:49:30,630 Ez da oraindik bezala hemen arazo bat dirudi. Hau besterik ez izan behar dela uste dut < 613 00:49:30,630 --> 00:49:36,960 baita pretty askoz beti 00:49:44,860 Orain, hori zergatik hautsi zen benetan pentsatzen. 615 00:49:44,860 --> 00:49:53,370 Does Edozeinek dute asmatzen zergatik zen berrezartzeko 0 i begizta-iterazio bakoitzean zehar? 616 00:50:01,300 --> 00:50:09,350 Array hori [i] 0 ezartzen ari da hemen gertatzen da barruan gauza bakarra da. 617 00:50:09,350 --> 00:50:15,350 Beraz, nolabait, kode-lerro hau sortzen ari da gure int i 0 bezala ezarri. 618 00:50:16,730 --> 00:50:23,130 [Ikasleak] Ezin izan da i zati honetan memoria delako gainidazteko izango da 619 00:50:23,130 --> 00:50:27,970 array elementu hurrengo uste du? >> [Bowden] Bai. 620 00:50:27,970 --> 00:50:33,880 Gure array amaieran haratago goaz, 621 00:50:33,880 --> 00:50:39,870 nolabait espazio horretan ari gara gainidazteko i balioa ahaztuta. 622 00:50:39,870 --> 00:50:48,030 Eta, beraz, buggy4 begiratuz gero, break nagusiak, exekutatu, 623 00:50:48,030 --> 00:50:53,120 dezagun inprimatu i helbidea. 624 00:50:53,120 --> 00:50:57,280 Da bffff124 itxura. 625 00:50:57,280 --> 00:51:03,930 Orain dezagun array helbidea inprimatu [0]. 110. 626 00:51:03,930 --> 00:51:06,290 [1] buruz? 114. 627 00:51:06,290 --> 00:51:07,920 [2], 118. 628 00:51:07,920 --> 00:51:14,530 11c, 120. array [5] bfff124 da. 629 00:51:14,530 --> 00:51:26,990 Beraz, array [5] i, eta horrek esan nahi du array hori [5] i helbidea bera du. 630 00:51:26,990 --> 00:51:30,720 Dute helbidea bera bada, gauza bera dira. 631 00:51:30,720 --> 00:51:38,410 Beraz, array [5] ezarri ditugu: 0, i buruz ari gara eta 0. 632 00:51:38,410 --> 00:51:46,070 Eta honi buruz uste baduzu pilaren dagokionez, 633 00:51:46,070 --> 00:51:55,590 int i izendatu zuten lehen aldiz, eta horrek esan nahi du espazio batzuk lortzen i pilaketan. 634 00:51:55,590 --> 00:52:04,730 Ondoren, array [5] esleituko da, eta, beraz, orduan 20 byte pilaketan banatzen dira. 635 00:52:04,730 --> 00:52:08,400 Beraz, i esleitu lortzen lehen aldiz, orduan 20 byte horiek esleitu get. 636 00:52:08,400 --> 00:52:11,400 Beraz, gertatzen array eskuinera aurretik i 637 00:52:11,400 --> 00:52:19,230 eta bidea delako, esan bezala azken astean, non teknikoki pila hazten behera, 638 00:52:19,230 --> 00:52:28,520 denean indizea array batean, bermatuta dugu array-en posizioa 0th 639 00:52:28,520 --> 00:52:31,970 array en lehen posizioa beti aurretik gertatzen da. 640 00:52:31,970 --> 00:52:35,900 Nola marraztu dut azken astean antzeko zerbait da. 641 00:52:35,900 --> 00:52:42,210 Ohartu, behealdean helbidea 0 dugu, eta goialdean helbidea Max dugu. 642 00:52:42,210 --> 00:52:44,880 Pila da beti behera gero eta handiagoa da. 643 00:52:48,100 --> 00:52:53,500 Demagun i esleitu dugu. 644 00:52:53,500 --> 00:52:59,680 Osokoaren esleitu i, eta horrek esan nahi du, let besterik ez esan hemen osokoaren i lortzen esleitu. 645 00:52:59,680 --> 00:53:06,420 Jarraian, gure 5 zenbaki osoen array esleitu, eta horrek esan nahi du horren azpian dugu, 646 00:53:06,420 --> 00:53:11,230 pila behera geroztik, gero eta handiagoa, 5 Osoko zenbaki horiek esleitu. 647 00:53:11,230 --> 00:53:15,900 Array en posizioa Baina nola array lan egiten delako, gaude bermatzen lehen 648 00:53:15,900 --> 00:53:22,260 beti helbide bat array bigarren gauza baino gutxiago ditu. 649 00:53:22,260 --> 00:53:28,270 Beraz, array posizioa 0 beti lehen gertatuko memoria, 650 00:53:28,270 --> 00:53:30,700 array posizio 1 du horren ondoren gertatuko, berriz, 651 00:53:30,700 --> 00:53:33,310 eta horren ondoren gertatuko array posizioa 2 652 00:53:33,310 --> 00:53:37,900 horrek esan nahi du hori array posizioa 0 nonbait gertatuko litzateke behera hemen, 653 00:53:37,900 --> 00:53:40,690 array posizio 1 gainetik gertatuko litzateke 654 00:53:40,690 --> 00:53:45,530 sortu mugituz, esan nahi du goi-mailako helbideak delako gehienezko helbidea geroztik hemen. 655 00:53:45,530 --> 00:53:50,490 Beraz, array [0] behera hemen, array [1] sortu hemen, array [2] sortu hemen, array [3] sortu hemen. 656 00:53:50,490 --> 00:53:55,620 Ohartu nola aurretik guztia esleitu i modu guztiak, hemen, 657 00:53:55,620 --> 00:54:01,040 mugitzen gara gero eta gehiago gure array sartu, gure osokoa i eta hurbilago hurbilago ari gara. 658 00:54:01,040 --> 00:54:07,640 Beraz, besterik ez da array hori gertatzen da [5], posizioa gure array haratago bat da, 659 00:54:07,640 --> 00:54:13,010 zehazki non osokoaren gertatu i esleitu behar da. 660 00:54:13,010 --> 00:54:16,920 Beraz, bertan sakatuz espazioa pila gertatuko dugu 661 00:54:16,920 --> 00:54:21,680 zen guztia i esleitu, eta hori 0 ezartzen ari gara. 662 00:54:21,680 --> 00:54:26,160 >> Hori da nola lan egiten duen. Zalantzak dituzu? Bai. 663 00:54:26,160 --> 00:54:30,710 [Ikasleak] Never mind. Ongi da. 664 00:54:30,710 --> 00:54:33,090 [Ikasleak] Nola akatsak moduko horiek saihesteko duzu? 665 00:54:33,090 --> 00:54:41,190 Akatsak sort hauek? Ez erabili C programazio hizkuntza gisa. 666 00:54:41,190 --> 00:54:45,840 Erabili array mugetatik egiaztatzen duen hizkuntza bat. 667 00:54:45,840 --> 00:54:55,900 Betiere Oraindik duzun bezala, kontuz ibili, besterik ez duzu zure array mugetatik igaroz saihesteko. 668 00:54:55,900 --> 00:54:58,300 [Ikasleen] Hortaz, hona hemen azken zure array mugetatik joan gara - 669 00:54:58,300 --> 00:55:01,840 [Bowden] Hori da non gauzak oker joan. >> [Ikasleak] Oh, ados. 670 00:55:01,840 --> 00:55:05,730 Betiere, zure array esleitutako memoria barruan zaitezten, fina Oraindik duzun. 671 00:55:05,730 --> 00:55:12,400 Baina C error egiaztapena ez du. Array ez dut bada [1000], atsegin handiz izango da besterik ez aldatzeko, zer gerta ere 672 00:55:12,400 --> 00:55:16,500 Array hasieran doan da, eta, ondoren, 1000 posizioak jartzen da eta ondoren ezartzen du 0. 673 00:55:16,500 --> 00:55:20,000 Ez du egin egiaztapena edozein oh, hau ez da benetan 1000 gauzak. 674 00:55:20,000 --> 00:55:22,750 1000 zer aldatuko nuke modu haratago da, 675 00:55:22,750 --> 00:55:26,940 Java edo zerbait array, berriz duzu mugetatik indizearen 676 00:55:26,940 --> 00:55:29,820 edo mugetatik salbuespen indizea. 677 00:55:29,820 --> 00:55:33,950 Horregatik, hizkuntza maila altuagoa asko gauza horiek 678 00:55:33,950 --> 00:55:37,340 non array mugetatik haratago joaten bada, hutsik egin 679 00:55:37,340 --> 00:55:40,070 beraz, ez duzu azpian gauzak alda ditzakezu 680 00:55:40,070 --> 00:55:42,590 eta, ondoren, gauzak besterik gabe, salbuespen bat lortzeko baino askoz okerragoa 681 00:55:42,590 --> 00:55:44,940 array amaieran haratago joan esanez. 682 00:55:44,940 --> 00:55:50,970 [Ikasleak] Eta horrela behar besterik ez dugu aldatu <= bakarrik > [Bowden] Bai. 683 00:55:50,970 --> 00:55:54,800 00:55:59,560 sizeof (array) 20 geroztik, baina bakarrik nahi dugu 5. >> [Ikasleak] Eskuin. 685 00:55:59,560 --> 00:56:04,060 Galdera gehiago? Ongi da. 686 00:56:04,060 --> 00:56:07,380 >> [Ikasleak] galdera bat daukat. >> Bai. 687 00:56:07,380 --> 00:56:16,440 [Ikasleen] Zer da benetako array aldagaia ez dago? 688 00:56:16,440 --> 00:56:20,000 [Bowden] Like zer da array? 689 00:56:20,000 --> 00:56:24,930 Array bera sinbolo bat da. 690 00:56:24,930 --> 00:56:31,490 Besterik ez da ari garen erreferentziatutako 20 byte Irteeran helbidea. 691 00:56:31,490 --> 00:56:38,070 Da egin ahal izango duzu uste erakuslea gisa,, baina etengabeko erakuslea da. 692 00:56:38,070 --> 00:56:44,140 Bezain laster gauzak get konpilatu, array aldagaia ez da existitzen jada. 693 00:56:44,140 --> 00:56:48,210 [Ikasleak] Beraz, nola array tamaina ez aurkitu? 694 00:56:48,210 --> 00:56:54,130 Array tamaina bloke tamaina ikur horretarako erreferentzia egiten dio erreferentzia. 695 00:56:54,130 --> 00:57:01,240 Printf antzeko zerbait egin behar dut ("% p \ n", array); 696 00:57:01,240 --> 00:57:05,140 dezagun exekutatu da. 697 00:57:12,960 --> 00:57:15,530 Zer egin dut gaizki? 698 00:57:15,530 --> 00:57:19,220 Array 'array' deklaratu hemen. 699 00:57:20,820 --> 00:57:23,200 Oh, hemen. 700 00:57:23,200 --> 00:57:31,250 Clang clever da, eta deklaratu duten I 5 elementu gisa array nabarituko gertatzen 701 00:57:31,250 --> 00:57:34,540 , baina posizioa 1000 sartu naiz indexatzeko. 702 00:57:34,540 --> 00:57:38,450 Egin daiteke, horiek besterik ez dira konstanteak delako. 703 00:57:38,450 --> 00:57:43,370 Bakarrik joan daiteke, beraz, orain arte, array mugetatik haratago joan naiz duten I ohartu. 704 00:57:43,370 --> 00:57:46,880 Baina okerra izan i izan dugu aldez aurretik, 705 00:57:46,880 --> 00:57:51,040 ezin da, seguru asko, zehaztu zenbat balio behar i izan, 706 00:57:51,040 --> 00:57:55,540 beraz, ezin da zehaztu zen i array amaiera haratago joan. 707 00:57:55,540 --> 00:57:59,430 Hori besterik ez argia izateaz Clang. 708 00:57:59,430 --> 00:58:03,340 >> Baina gaur egun buggy4. Beraz, zer gehiago am egiten oker I? 709 00:58:03,340 --> 00:58:05,970 Inplizituki 'printf' liburutegi funtzioa geratuko. 710 00:58:05,970 --> 00:58:14,960 # Include nahi dut. 711 00:58:14,960 --> 00:58:18,710 Ongi da. Orain buggy4 exekutatzen ari da. 712 00:58:18,710 --> 00:58:24,840 Array balioa inprimatzea bezala hemen egin nuen, erakuslea gisa inprimatzeko 713 00:58:24,840 --> 00:58:30,060 grabatuak zerbait itxura hau bfb8805c helbidea batzuk 714 00:58:30,060 --> 00:58:33,450 pila-ish eskualdean. 715 00:58:33,450 --> 00:58:41,820 Array bera erakuslea bat bezalakoa da, baina ez da benetako erakusle bat, 716 00:58:41,820 --> 00:58:45,410 erakuslea geroztik erregular bat aldatzeko aukera izango dugu. 717 00:58:45,410 --> 00:58:54,700 Array besterik ez da konstante batzuk. Memoria 20 bloke helbidea 0xbfb8805c etan hasiko da. 718 00:58:54,700 --> 00:59:09,020 Beraz, helbide honen bitartez bfb8805c +20- edo -20 uste dut 719 00:59:09,020 --> 00:59:17,400 array honetan esleitutako memoria da. 720 00:59:17,400 --> 00:59:20,350 Array, aldagai bera ez da gordetzen edonora joateko. 721 00:59:20,350 --> 00:59:27,660 Konpilatzen ari zarenean, konpiladore - eskua at uhin - 722 00:59:27,660 --> 00:59:33,060 baina konpiladorea erabili array izan daki. 723 00:59:33,060 --> 00:59:36,090 Array hori non hasten badaki, 724 00:59:36,090 --> 00:59:40,910 eta, beraz, beti izango da, besterik gabe gauzak offsets dagokionez hasieran horretatik aurrera. 725 00:59:40,910 --> 00:59:43,960 Ez du aldagai bat bera array irudikatu behar. 726 00:59:43,960 --> 00:59:53,730 Baina int * p = array antzeko zerbait egin dut, gaur egun p array hori seinalatzen duen erakuslea da, 727 00:59:53,730 --> 00:59:57,830 eta, gaur egun, p benetan pila ez da existitzen. 728 00:59:57,830 --> 01:00:01,950 Free p aldatu dut. P = malloc egin ahal izango dut. 729 01:00:01,950 --> 01:00:06,500 Beraz, array jatorriz adierazi du, gaur egun puntu espazio batzuk zeure gainean. 730 01:00:06,500 --> 01:00:09,620 Array = malloc egin ezin dut. 731 01:00:09,620 --> 01:00:13,710 Clang da clever bada, me at egingo du Yell eskuineko bat off. 732 01:00:17,000 --> 01:00:21,430 Egia esan, nahiko ziur gcc Horretarako litzateke gehiegi naiz. 733 01:00:21,430 --> 01:00:25,010 Beraz, array-mota 'int [5]' ez da esleitzekoak. 734 01:00:25,010 --> 01:00:28,040 Ezin duzu zerbait esleitzeko array mota 735 01:00:28,040 --> 01:00:30,500 array besterik ez konstante bat delako. 736 01:00:30,500 --> 01:00:34,760 Duen sinboloa 20 byte horiek erreferentzia da. Ezin dut aldatu. 737 01:00:34,760 --> 01:00:37,690 >> [Ikasleak] Eta non array-tamaina gordetzen da? 738 01:00:37,690 --> 01:00:40,670 [Bowden] gordetzen ez edonora joateko. Denean konpilatzen da. 739 01:00:40,670 --> 01:00:46,310 Beraz, non array tamaina gordetzen da? 740 01:00:46,310 --> 01:00:51,870 Bakarrik erabili ahal izango duzu sizeof (array) funtzioa array deklaratu hori bera barruan. 741 01:00:51,870 --> 01:01:03,150 Beraz, bada funtzio batzuk, foo, egin behar dut, eta ez dut (int array []) 742 01:01:03,150 --> 01:01:10,450 printf ("% d \ n", sizeof (array)); 743 01:01:10,450 --> 01:01:21,330 eta, ondoren, behera hemen foo (array) deitzen diot nik; 744 01:01:21,330 --> 01:01:24,840 funtzio honen barruan dezagun exekutatu da. 745 01:01:34,200 --> 01:01:36,840 Clang clever izatea berriro. 746 01:01:36,840 --> 01:01:43,890 Me da kontatzeko array funtzioa parametroak sizeof 747 01:01:43,890 --> 01:01:46,690 '* int' tamaina itzuliko da. 748 01:01:46,690 --> 01:01:55,150 Hau akats bat izango litzateke, ez balitz zer gertatuko nahi nuen. 749 01:01:55,150 --> 01:01:58,960 Dezagun benetan itzali Werror. 750 01:02:14,950 --> 01:02:17,590 Kontuz. Txartelak fina dira. 751 01:02:17,590 --> 01:02:19,960 Hala ere, konpilatu gisa irauten du abisu bat. 752 01:02:19,960 --> 01:02:22,910 . / A.out inprimatu 4. 753 01:02:22,910 --> 01:02:28,650 Sortu abisua txarto joan adierazle garbia da. 754 01:02:28,650 --> 01:02:34,120 Int array hau da, besterik gabe, sizeof (int *) inprimatu. 755 01:02:34,120 --> 01:02:39,790 Nahiz eta array [5] jarri dut hemen, oraindik ere, besterik gabe, sizeof (int *) inprimatu joan. 756 01:02:39,790 --> 01:02:47,440 Beraz, ahalik eta azkarren pasatzen duzun bezala funtzio batean, array-ak eta erakusleak arteko bereizketa 757 01:02:47,440 --> 01:02:49,670 existitzen ez den. 758 01:02:49,670 --> 01:02:52,640 Gertatzen da array bat izan zen pila izendatu, 759 01:02:52,640 --> 01:02:58,300 baina ahalik eta azkarren pasako balio bezala, 0xbf blah, blah, funtzio honetan sartu blah, 760 01:02:58,300 --> 01:03:03,350 ondoren erakuslea hau array hori puntu pilan. 761 01:03:03,350 --> 01:03:08,310 Beraz, horrek esan nahi du sizeof array izendatu zuten funtzioa bakarrik aplikatzen, 762 01:03:08,310 --> 01:03:11,230 eta horrek esan nahi du funtzio hau konpilatzen ari zaren, 763 01:03:11,230 --> 01:03:17,330 denean Clang funtzio honen bidez doa, array tamaina 5 array int bat ikusten da. 764 01:03:17,330 --> 01:03:20,640 Orduan sizeof (array) ikusten da. Beno, 20. 765 01:03:20,640 --> 01:03:26,440 Hori da benetan nola sizeof, funtsean, ia kasu guztietan funtzionatzen du. 766 01:03:26,440 --> 01:03:31,150 Sizeof ez da funtzio bat; eragile bat da. 767 01:03:31,150 --> 01:03:33,570 Ez duzu deitu sizeof funtzioa. 768 01:03:33,570 --> 01:03:38,280 Sizeof (int), konpiladorea du soilik 4 itzultzeko. 769 01:03:41,480 --> 01:03:43,700 Dut? Ongi da. 770 01:03:43,700 --> 01:03:47,520 >> [Ikasleak] Beraz, zer sizeof (array) arteko desberdintasun nagusia eta foo da? 771 01:03:47,520 --> 01:03:52,840 Hau da, ari gara sizeof (array), mota int * delako esaten, 772 01:03:52,840 --> 01:03:57,120 array behera hemen, berriz, ez da mota int * array bat da, int. 773 01:03:57,120 --> 01:04:04,540 >> [Ikasleak] Beraz, array [] ordez int * array izan parametro bada, 774 01:04:04,540 --> 01:04:09,230 zela esan nahi izan duzula oraindik aldatzeko array erakuslea delako? 775 01:04:09,230 --> 01:04:14,250 [Bowden] Like? >> [Ikasleak] Bai. Ezin array aldatzeko funtzio barruan orain? 776 01:04:14,250 --> 01:04:18,420 [Bowden] array alda dezake bi kasuetan. 777 01:04:18,420 --> 01:04:23,130 Kasu horietan, batean zein bestean, array [4] = 0 esan duzu. 778 01:04:23,130 --> 01:04:26,590 [Ikasleak] Baina array puntu beste zerbait egin duzu? 779 01:04:26,590 --> 01:04:30,230 [Bowden] Oh. Bai. Nolanahi ere - >> [ikasleak] Bai. 780 01:04:30,230 --> 01:04:38,410 [Bowden] array [] eta int * array arteko bereizketa, ez dago bat ere ez. 781 01:04:38,410 --> 01:04:42,570 Multidimentsionala array batzuk hemen ere lor dezake 782 01:04:42,570 --> 01:04:47,050 sintaxia batzuk erosoa, baina oraindik erakuslea besterik ez da. 783 01:04:47,050 --> 01:04:56,400 Horrek esan nahi du, free array egin naizela = malloc (sizeof (int)), eta gaur egun seinalatu beste nonbait. 784 01:04:56,400 --> 01:04:59,610 Baina, nola funtzionatzen du betirako eta beti, 785 01:04:59,610 --> 01:05:03,210 array honen aldaketak eginez beste zerbait seinalatu 786 01:05:03,210 --> 01:05:07,570 ez da aldatuko array hau da argumentua kopia bat delako, 787 01:05:07,570 --> 01:05:10,780 Ez da argumentu hori erakuslea. 788 01:05:10,780 --> 01:05:16,070 Eta, benetan, zantzurik gehiago dela bera 789 01:05:16,070 --> 01:05:21,100 Dagoeneko ikusi dugu zer inprimatzeko array grabatuak - 790 01:05:21,100 --> 01:05:31,410 zer inprimatu array helbidea edo array helbidea helbidea 791 01:05:31,410 --> 01:05:36,290 horiek bai? 792 01:05:41,770 --> 01:05:45,220 Dezagun ahaztu hau. 793 01:05:48,140 --> 01:05:51,660 Ongi da. Gauza ederra da. Gaur egun. / A.out ari da. 794 01:05:51,660 --> 01:06:00,220 Inprimaketa array, ondoren, array helbidea inprimatzeko, gauza bera dira. 795 01:06:00,220 --> 01:06:02,870 Array besterik gabe, ez da existitzen. 796 01:06:02,870 --> 01:06:08,190 Array ari zaren inprimatzea, sinboloa 20 byte horiek aipatzen ari zaren inprimatzeko daki. 797 01:06:08,190 --> 01:06:11,940 Array helbidea inprimatzea, bai, array ez du existitzen. 798 01:06:11,940 --> 01:06:17,200 Helbide bat ez da izan, beraz, 20 byte horiek helbidea bistaratzen besterik ez da. 799 01:06:20,820 --> 01:06:28,150 Bezain laster konpilatu behera, zure buggy4 konpilatu nahi. / A.out 800 01:06:28,150 --> 01:06:30,340 array existitzen ez da. 801 01:06:30,340 --> 01:06:33,640 Erakusleak existitzen. Arrayak ez. 802 01:06:34,300 --> 01:06:38,060 Array ordezkari memoria Bloke oraindik badaude, 803 01:06:38,060 --> 01:06:43,270 baina array aldagaiak eta mota horretako aldagai ez da existitzen. 804 01:06:46,260 --> 01:06:50,270 Dutenek, array-ak eta erakusleak arteko ezberdintasunak nagusiak bezalakoak dira 805 01:06:50,270 --> 01:06:55,590 funtzio deiak egin bezain laster, ez dago diferentzia da. 806 01:06:55,590 --> 01:07:00,460 Baina barruan funtzio array bera izendatu da, sizeof ezberdina 807 01:07:00,460 --> 01:07:05,190 ari zaren mota ordez tamaina bloke tamaina inprimatzeko geroztik, 808 01:07:05,190 --> 01:07:08,950 eta ezin duzu aldatu da sinbolo bat delako. 809 01:07:08,950 --> 01:07:14,370 Gauza eta helbidea gauza inprimatzea gauza bera inprimatzen ditu. 810 01:07:14,370 --> 01:07:18,480 Eta hori nahiko askoz da. 811 01:07:18,480 --> 01:07:20,820 [Ikasleak] Ezin izan bat denbora gehiago esan duzu? 812 01:07:21,170 --> 01:07:24,170 Galdu dut agian zerbait. 813 01:07:24,170 --> 01:07:29,260 Inprimaketa array eta helbidea array gauza bera bistaratzen 814 01:07:29,260 --> 01:07:33,180 inprimatu erakuslea erakusleak helbidea versus bada, berriz, 815 01:07:33,180 --> 01:07:36,010 Gauza bat da zer egiten ari zaren seinalatuz helbidea bistaratzen du, 816 01:07:36,010 --> 01:07:40,360 beste pilaren erakuslea helbidea bistaratzen du. 817 01:07:40,360 --> 01:07:47,040 Erakuslea aldatu ahal izango duzu, ezin duzu aldatu array sinbolo bat. 818 01:07:47,740 --> 01:07:53,270 Eta sizeof erakuslea da, erakuslea mota horren tamaina inprimatzeko. 819 01:07:53,270 --> 01:07:57,470 Beraz, int * p sizeof (p) 4 inprimatu 820 01:07:57,470 --> 01:08:04,110 baina int array [5] inprimatu sizeof (array) 20 inprimatzeko. 821 01:08:04,110 --> 01:08:07,480 [Ikasleak] Beraz, int array [5] 20 inprimatuko ditu? >> Bai. 822 01:08:07,480 --> 01:08:13,300 Horregatik buggy4 barruan sizeof (array) izan erabili 823 01:08:13,300 --> 01:08:16,660 hau izan zen i <20 egiteko, eta hori ez da nahi duguna. 824 01:08:16,660 --> 01:08:20,880 I <5 nahi dugu. >> [Ikasleak] Larreina. 825 01:08:20,880 --> 01:08:25,569 [Bowden] Eta gero, ahalik eta azkarren hasiko funtzioak pasatuz, 826 01:08:25,569 --> 01:08:34,340 egin badugu int * p = array; 827 01:08:34,340 --> 01:08:39,779 funtzio honen barruan, funtsean, ezin dugu erabili p eta array zehazki modu berean, 828 01:08:39,779 --> 01:08:43,710 sizeof arazoa aldatzen eta arazoa izan ezik. 829 01:08:43,710 --> 01:08:49,810 Baina p [0] = 1; array [0] = 1 esaten berdina da; 830 01:08:49,810 --> 01:08:55,600 Eta ahalik eta azkarren esan dugun bezala foo (array); edo foo (p); 831 01:08:55,600 --> 01:08:59,760 foo funtzioaren barruan, dei bera da birritan. 832 01:08:59,760 --> 01:09:03,350 Bi dei horien arteko aldea ez da. 833 01:09:07,029 --> 01:09:11,080 >> Pertsona orok on? Ongi da. 834 01:09:14,620 --> 01:09:17,950 10 minutu ditugu. 835 01:09:17,950 --> 01:09:28,319 >> Saiatzeko honetan Hacker typer programa bidez lortu dugu, 836 01:09:28,319 --> 01:09:32,350 web orri honetan, azken urtean edo zerbait atera zen. 837 01:09:34,149 --> 01:09:41,100 Besterik ez ustezko ausaz idazten duzun bezala, eta bistaratzen du 838 01:09:41,100 --> 01:09:46,729 Whatever fitxategia kargatu dute gertatzen da, zer ari zaren idazten dirudienez. 839 01:09:46,729 --> 01:09:52,069 Sistema eragilearen kodea nolabaiteko itxura bezalakoa da. 840 01:09:53,760 --> 01:09:56,890 Hori zer ezartzea nahi dugu. 841 01:10:08,560 --> 01:10:11,690 Izeneko hacker_typer bitarrak exekutagarri bat izan behar duzu 842 01:10:11,690 --> 01:10:14,350 argumentu soil bat hartzen du, fitxategia "hacker mota." 843 01:10:14,350 --> 01:10:16,480 Exekutagarriaren carrera pantaila garbitu beharko 844 01:10:16,480 --> 01:10:20,850 eta, ondoren, inprimatu karaktere bat transmititutako-in fitxategia erabiltzaileak tekla bat sakatzen den bakoitzean. 845 01:10:20,850 --> 01:10:24,990 Edozein dela ere tekla sakatu Beraz, bota beharko luke, eta horren ordez, fitxategia karaktere bat inprimatzeko 846 01:10:24,990 --> 01:10:27,810 argumentua da. 847 01:10:29,880 --> 01:10:34,350 Pretty askoz dut esango dizu zer jakin behar dugu, gauzak dira. 848 01:10:34,350 --> 01:10:36,440 Baina ikusteko termios liburutegia nahi dugu. 849 01:10:36,440 --> 01:10:44,840 Ez dut inoiz liburutegi hau nire bizitza osoan, beraz, oso gutxieneko helburu ditu. 850 01:10:44,840 --> 01:10:48,610 Baina hau ez da urruntzen bota pertsonaia hit duzu erabili ahal izango dugu liburutegi izango 851 01:10:48,610 --> 01:10:52,390 estandar sartu idazten ari zaren 852 01:10:56,970 --> 01:11:05,840 Beraz hacker_typer.c, eta # include nahi dugu. 853 01:11:05,840 --> 01:11:12,870 Man orri termios Looking for - I'm da terminal OS edo zerbait asmatzen 854 01:11:12,870 --> 01:11:16,240 Ez dakit nola irakurri. 855 01:11:16,240 --> 01:11:21,040 Begira, 2 fitxategiak hauek dio, beraz, egin dugu. 856 01:11:37,620 --> 01:11:46,820 >> Lehenik eta behin, lehenik eta behin, argumentu bakar bat, fitxategia irekitzeko behar dugu hartu nahi dugu. 857 01:11:46,820 --> 01:11:52,420 Beraz, zer egin nahi dut? Nola argumentu soil bat daukat ikusteko egiaztatu dut? 858 01:11:52,420 --> 01:11:56,480 [Ikasleen] argc bada berdin da. >> [Bowden] Bai. 859 01:11:56,480 --> 01:12:21,250 Beraz, (argc = 2!) Printf ("erabilera:% s [fitxategia ireki]"). 860 01:12:21,250 --> 01:12:32,750 Beraz, gaur egun exekutatu I bada bigarren argumentu bat eskainiz gabe - oh, lerro berri behar dut 861 01:12:32,750 --> 01:12:36,240 ikus erabilera dio duzu:. / hacker_typer 862 01:12:36,240 --> 01:12:39,770 eta, ondoren, bigarren argumentua ireki nahi dut fitxategia izan behar du. 863 01:12:58,430 --> 01:13:01,260 Orain, zer egin dezaket? 864 01:13:01,260 --> 01:13:08,490 Fitxategi hau irakurri nahi dut. Nola fitxategi bat irakurri dut? 865 01:13:08,490 --> 01:13:11,920 [Ikasleak] lehen aldiz ireki dezakezu. >> Bai. 866 01:13:11,920 --> 01:13:15,010 Beraz, fopen. Zer esan nahi du fopen itxura? 867 01:13:15,010 --> 01:13:22,980 [Ikasleak] Filename. >> [Bowden] Filename argv [1] izango da. 868 01:13:22,980 --> 01:13:26,110 [Ikasleak] Eta gero, zer da egin nahi duzun, eta, beraz, - >> [Bowden] Bai. 869 01:13:26,110 --> 01:13:28,740 Beraz, ez baduzu gogoratzen, besterik gabe, ezin duzu gizon fopen 870 01:13:28,740 --> 01:13:32,960 non eraikiak char * path non bidea da filename izango da, 871 01:13:32,960 --> 01:13:34,970 char * eraikiak modua. 872 01:13:34,970 --> 01:13:38,660 Gertatuko ez gogoratzeko modua bada, orduan moduan begiratu dezakezu. 873 01:13:38,660 --> 01:13:44,660 Man orriak Inside, barrarik pertsonaia da zer gauzak bilatzeko erabili dezakezu. 874 01:13:44,660 --> 01:13:49,790 Beraz, / modua bilatzeko modua idazten dut. 875 01:13:49,790 --> 01:13:57,130 n eta N zikloa erabili ahal izango duzu bilaketa-partiduak bidez. 876 01:13:57,130 --> 01:13:59,800 Hemen argumentu moduan puntu dio kate 877 01:13:59,800 --> 01:14:01,930 honako sekuentzia bat hasten. 878 01:14:01,930 --> 01:14:06,480 R Beraz, irakurketa testu Open file. Hau da, zer egin nahi dugun. 879 01:14:08,930 --> 01:14:13,210 For irakurtzen, eta gorde nahi dut. 880 01:14:13,210 --> 01:14:18,720 Gauza da FILE * izango. Orain zer egin nahi dut? 881 01:14:18,720 --> 01:14:21,200 Give me bigarren bat. 882 01:14:28,140 --> 01:14:30,430 Ongi da. Orain zer egin nahi dut? 883 01:14:30,430 --> 01:14:32,940 [Ikasleak] Egiaztatu da NULL bada. >> [Bowden] Bai. 884 01:14:32,940 --> 01:14:38,690 Edonoiz fitxategi bat irekitzeko, ziurtatu ari zaren ongi irekitzeko gai. 885 01:14:58,930 --> 01:15:10,460 >> Orain termios stuff hori egin nahi dut lehen nire uneko ezarpenak irakurri nahi dut 886 01:15:10,460 --> 01:15:14,050 eta gorde duten zerbait sartu eta, ondoren, nire ezarpenak aldatu nahi dut 887 01:15:14,050 --> 01:15:19,420 kanpoan edozein karaktere idatzi dut, bota 888 01:15:19,420 --> 01:15:22,520 eta, ondoren, ezarpen horiek eguneratu nahi dut. 889 01:15:22,520 --> 01:15:27,250 Eta gero, programaren amaieran, atzera nire jatorrizko ezarpenak aldatzeko nahi dut. 890 01:15:27,250 --> 01:15:32,080 Beraz, eta egitura mota termios, eta horietako bi nahi ditut. 891 01:15:32,080 --> 01:15:35,600 Lehena da nire current_settings izan, 892 01:15:35,600 --> 01:15:42,010 eta, ondoren, nire hacker_settings izan ari dira. 893 01:15:42,010 --> 01:15:48,070 Lehenik eta behin, nire uneko ezarpenak gorde nahi dut, 894 01:15:48,070 --> 01:15:53,790 ondoren hacker_settings eguneratu nahi dut, 895 01:15:53,790 --> 01:16:01,570 eta, ondoren, nire programaren amaieran modu,, uneko ezarpenak itzuli nahi dut. 896 01:16:01,570 --> 01:16:08,660 Beraz, uneko ezarpenak gordetzean, lan egiten duen, dugu gizon termios. 897 01:16:08,660 --> 01:16:15,810 Hau int tcsetattr, int tcgetattr dugula ikusten dugu. 898 01:16:15,810 --> 01:16:22,960 Bere erakuslea struct termios batean pasatzen dut. 899 01:16:22,960 --> 01:16:30,640 Modu honetan itxura - I've dagoeneko ahaztuta funtzioa deitzen zen. 900 01:16:30,640 --> 01:16:34,930 Kopiatu eta itsatsi. 901 01:16:39,150 --> 01:16:45,500 Tcgetattr Beraz, gero eta egitura, pasa naiz duten I informazioa gorde nahi dut, 902 01:16:45,500 --> 01:16:49,650 den current_settings izango, 903 01:16:49,650 --> 01:16:59,120 eta lehen argumentua ezaugarriak gorde nahi dut gauza fitxategia deskriptorea da. 904 01:16:59,120 --> 01:17:04,360 Fitxategia deskriptorea edonoiz fitxategi bat irekitzeko bezalakoa da, fitxategia deskriptorea bat egingo du. 905 01:17:04,360 --> 01:17:14,560 When I fopen argv [1], erreferentziatutako ari zaren fitxategia deskriptorea lortu du 906 01:17:14,560 --> 01:17:16,730 bakoitzean irakurri edo idatzi nahi duzun. 907 01:17:16,730 --> 01:17:19,220 Hori ez da hemen erabili nahi dut fitxategia deskriptorea. 908 01:17:19,220 --> 01:17:21,940 Badira hiru fitxategi-deskriptore dute lehenespenez 909 01:17:21,940 --> 01:17:24,310 estandarrak dira, out, estandarra eta errore estandarra. 910 01:17:24,310 --> 01:17:29,960 Berez, uste dut da estandarra da 0, standard out 1, eta errore estandarra da 2. 911 01:17:29,960 --> 01:17:33,980 Beraz, zer ezarpenak aldatu nahi dut? 912 01:17:33,980 --> 01:17:37,370 Bakoitzean pertsonaia bat hit I ezarpenak aldatu nahi dut, 913 01:17:37,370 --> 01:17:41,590 Pertsonaia bat bota du kanpoan ordez pantaila inprimatzeko nahi dut. 914 01:17:41,590 --> 01:17:45,960 Zer korrontea, out estandarra, edo errore estandarra estandarra - 915 01:17:45,960 --> 01:17:52,050 gauzak erantzuten teklatua idazten dut? >> [Ikasleen] >> Bai sartu Standard. 916 01:17:52,050 --> 01:17:56,450 Beraz, bi aukera ditu: I do 0 edo stdin egin ahal izango dut. 917 01:17:56,450 --> 01:17:59,380 Estandar current_settings dut sartu 918 01:17:59,380 --> 01:18:01,720 >> Orain ezarpen horiek eguneratu nahi dut, 919 01:18:01,720 --> 01:18:07,200 beraz, lehenengo hacker_settings zer nire current_settings dira kopiatu dut. 920 01:18:07,200 --> 01:18:10,430 Eta nola structs lana besterik ez da kopia izango da. 921 01:18:10,430 --> 01:18:14,510 Guztiak eremu hau kopiatzen, espero bezala. 922 01:18:14,510 --> 01:18:17,410 >> Orain, eremu batzuk eguneratu nahi dut. 923 01:18:17,410 --> 01:18:21,670 Termios begira, hau asko baten bidez irakurri nahi duzun 924 01:18:21,670 --> 01:18:24,110 besterik gabe, zer nahi bilatu nahi duzun ikusteko, 925 01:18:24,110 --> 01:18:28,210 baina begiratu nahi ari zaren banderak oihartzuna dira, 926 01:18:28,210 --> 01:18:33,110 beraz, Echo Echo sarrera karaktereak. 927 01:18:33,110 --> 01:18:37,710 Lehenik eta behin, ezarri nahi dut - I've dagoeneko ahaztuta eremu dira. 928 01:18:45,040 --> 01:18:47,900 Hau da, egiturari itxura. 929 01:18:47,900 --> 01:18:51,060 Sarrerako moduak Beraz, aldatu nahi dugula uste dut. 930 01:18:51,060 --> 01:18:54,210 Irtenbidea bilatuko dugu ziur esan zer aldatu nahi dugu. 931 01:19:04,060 --> 01:19:12,610 Guztiak horien bidez begiratu beharrik saihesteko lflag aldatu nahi dugu. 932 01:19:12,610 --> 01:19:14,670 Tokiko moduak aldatu nahi dugu. 933 01:19:14,670 --> 01:19:17,710 Osoa gauza honen bidez irakurri nahi duzun guztia pertenece ulertzeko 934 01:19:17,710 --> 01:19:19,320 aldatu nahi dugu. 935 01:19:19,320 --> 01:19:24,120 Baina barruan moduak toki hori aldatu nahi dugu. 936 01:19:27,080 --> 01:19:33,110 Beraz, zer da hacker_settings.cc_lmode deitzen. 937 01:19:39,630 --> 01:19:43,020 c_lflag. 938 01:19:49,060 --> 01:19:52,280 Hau da, non operadore bitekin sartuko gara. 939 01:19:52,280 --> 01:19:54,860 Denboraz kanpo-mota dugu, baina joan da azkar real dugu. 940 01:19:54,860 --> 01:19:56,600 Hau da non lortu bitekin operadoreak dugu, 941 01:19:56,600 --> 01:19:59,950 non uste dut bat denbora luzea duela esan nuen bakoitzean banderak aurre hasten zara, 942 01:19:59,950 --> 01:20:03,370 erabiliz bitekin operadorea asko duzu. 943 01:20:03,370 --> 01:20:08,240 Bandera bit bakoitzak portaera nolabaiteko dagokio. 944 01:20:08,240 --> 01:20:14,090 Beraz, hemen, Ez hori, gauza ezberdinak, non horiek guztiak esan nahi gauza desberdin mordo bat dauka. 945 01:20:14,090 --> 01:20:18,690 Baina, zer egin nahi dut besterik ez da itzali dagokion Echo bit. 946 01:20:18,690 --> 01:20:25,440 Beraz, buelta off I & = ¬ ECHO. 947 01:20:25,440 --> 01:20:30,110 Egia esan, tECHO edo antzeko zerbait dela uste dut. Besterik ez naiz berriro ikusteko. 948 01:20:30,110 --> 01:20:34,050 Termios dezaket. Besterik ez da Echo. 949 01:20:34,050 --> 01:20:38,440 ECHO apur bat bakarra izango da. 950 01:20:38,440 --> 01:20:44,230 ¬ ECHO bit guztiak 1 esan nahi du, eta horrek esan nahi du banderak guztiak ezartzen bada 951 01:20:44,230 --> 01:20:47,140 ECHO bit izan ezik. 952 01:20:47,140 --> 01:20:53,830 Lokaleko banderak honekin amaitzeko, banderak guztiak dira gaur egun, egia esan nahi du 953 01:20:53,830 --> 01:20:56,520 oraindik ere ezartzen bada. 954 01:20:56,520 --> 01:21:03,240 Nire ECHO Ez da egia ezartzen bada, orduan hau da, nahitaez ezarri ECHO Ez ezezkoan. 955 01:21:03,240 --> 01:21:07,170 Beraz, kode-lerro hori itzaltzen ECHO Ez. 956 01:21:07,170 --> 01:21:16,270 Kode lerro beste, besterik ez dut kopiatu denbora interes eta gero azaldu. 957 01:21:27,810 --> 01:21:30,180 Konponbidea, 0 esan zuen. 958 01:21:30,180 --> 01:21:33,880 Izango da seguru asko hobeto esplizituki esan stdin. 959 01:21:33,880 --> 01:21:42,100 >> Ohartu naiz hori ere I ECHO egiten | ICANON hemen. 960 01:21:42,100 --> 01:21:46,650 ICANON zerbait bereizi, eta horrek esan nahi du kanonikoa modua aipatzen du. 961 01:21:46,650 --> 01:21:50,280 Zer da kanonikoa modua esan nahi du normalean idazten ari zaren komando-lerroan, 962 01:21:50,280 --> 01:21:54,670 estandarra ez da ezer hit prozesatu newline arte. 963 01:21:54,670 --> 01:21:58,230 Beraz, denean GetString ez, gauza mordo bat idatzi duzu eta, ondoren, newline hit duzu. 964 01:21:58,230 --> 01:22:00,590 Denean estandarra bidaliko sartu 965 01:22:00,590 --> 01:22:02,680 Hau lehenetsia da. 966 01:22:02,680 --> 01:22:05,830 Desaktibatzeko I kanonikoa moduan, pertsonaia bakoitza sakatu 967 01:22:05,830 --> 01:22:10,910 da zer lortzen prozesatu ohi da txarra mota da gauza horiek prozesatzeko motela delako, 968 01:22:10,910 --> 01:22:14,330 hau da, zergatik ona da bufferrerako lerro osoa. 969 01:22:14,330 --> 01:22:16,810 Baina pertsonaia bakoitzak prozesatu nahi dut 970 01:22:16,810 --> 01:22:18,810 nahi dut, ez baita itxaron newline me hit da 971 01:22:18,810 --> 01:22:21,280 prozesatzen pertsonaia guztiek aurretik egon naiz idazten. 972 01:22:21,280 --> 01:22:24,760 Itzaltzen kanonikoa moduan. 973 01:22:24,760 --> 01:22:31,320 Stuff hau esan nahi du karaktere prozesatzen da benetan. 974 01:22:31,320 --> 01:22:35,830 Horrek esan nahi du, horiek berehala prozesatu; bezain laster am ditut idazten, prozesatu. 975 01:22:35,830 --> 01:22:42,510 Eta honen funtzioa da nire ezarpenak eguneratzean estandarra da, 976 01:22:42,510 --> 01:22:45,480 eta TCSA bitartez egin ezazu oraintxe bertan. 977 01:22:45,480 --> 01:22:50,310 Beste aukera da gaur egun errekaren guztia prozesatu arte itxaron beharko da. 978 01:22:50,310 --> 01:22:52,030 Hori ez da benetan axola. 979 01:22:52,030 --> 01:22:56,920 Just oraintxe aldatu nire ezarpenak edozein izanda ere, gaur egun hacker_typer_settings izan. 980 01:22:56,920 --> 01:23:02,210 Izeneko I hacker_settings uste dut, eta, beraz dezagun aldatu. 981 01:23:09,610 --> 01:23:13,500 Aldatu hacker_settings guztia. 982 01:23:13,500 --> 01:23:16,870 >> Orain gure programa amaieran leheneratu nahi dugu 983 01:23:16,870 --> 01:23:20,210 zer da gaur egun, barruan normal_settings 984 01:23:20,210 --> 01:23:26,560 den eta normal_settings itxura. 985 01:23:26,560 --> 01:23:30,650 Ohartu ez dut aldatu nire normal_settings edozein jatorriz lortzean geroztik. 986 01:23:30,650 --> 01:23:34,520 Ondoren, besterik ez aldatzeko berriz, horiek pasatzen dut atzera amaieran. 987 01:23:34,520 --> 01:23:38,390 Eguneratzea izan zen. Ongi da. 988 01:23:38,390 --> 01:23:43,900 >> Orain barruan hemen dut azaldu kodea denbora interesa. 989 01:23:43,900 --> 01:23:46,350 Ez da hainbeste kodea duten. 990 01:23:50,770 --> 01:24:03,750 Fitxategia karaktere bat irakurri dugu, ikusiko dugu. It f deitzen dugu. 991 01:24:03,750 --> 01:24:07,850 Orain gizon fgetc ditzakezu, baina zenbat fgetc da lanera joan 992 01:24:07,850 --> 01:24:11,910 besterik ez da, besterik ez duzu irakurri edo EOF karakterea itzuli da, 993 01:24:11,910 --> 01:24:15,680 diren fitxategi edo error happening batzuk amaiera dagokie. 994 01:24:15,680 --> 01:24:19,900 Ari gara, begizta fitxategia karaktere bakar bat irakurri jarraitu 995 01:24:19,900 --> 01:24:22,420 dugu exekutatu arte karaktere irakurri. 996 01:24:22,420 --> 01:24:26,650 Eta ari gara egiten, itxaron karaktere estandar sartu 997 01:24:26,650 --> 01:24:29,090 Aldi bakoitzean bakarra zerbait idazten duzunean, komando-lerroan, 998 01:24:29,090 --> 01:24:32,820 den pertsonaia bat estandarra irakurtzean sartu 999 01:24:32,820 --> 01:24:38,330 Ondoren putchar karakterra irakurri dugu hemen fitxategia standard out jartzea besterik ez da egingo. 1000 01:24:38,330 --> 01:24:42,890 Man putchar egin dezakezu, baina besterik ez da estandarra izarrekin jarriz, pertsonaia da inprimatzean. 1001 01:24:42,890 --> 01:24:51,600 Dezakezu ere, besterik gabe, egin printf ("% c", c); Same ideia. 1002 01:24:53,330 --> 01:24:56,670 Hori da gure lana soltean egin. 1003 01:24:56,670 --> 01:25:00,300 >> Azken gauza egin nahi dugu, besterik ez da fclose gure fitxategia. 1004 01:25:00,300 --> 01:25:03,310 Ez baduzu, fclose, memoria-leak bat da. 1005 01:25:03,310 --> 01:25:06,680 Ireki fitxategia jatorriz dugu fclose nahi dugu, eta hori dela uste dut. 1006 01:25:06,680 --> 01:25:13,810 Egiten dugu gero, baina dagoeneko I arazoak. 1007 01:25:13,810 --> 01:25:17,260 Ikus dezagun. 1008 01:25:17,260 --> 01:25:19,960 Zer egin kexatzen? 1009 01:25:19,960 --> 01:25:30,220 Mota 'struct _IO_FILE *' espero zen 'int', baina argumentua da. 1010 01:25:36,850 --> 01:25:39,370 Ikusten bada lan egiten dugu. 1011 01:25:45,210 --> 01:25:53,540 Bakarrik C99 onartzen. Augh. Ongi, egin hacker_typer. 1012 01:25:53,540 --> 01:25:57,760 Orain erabilgarria deskribapenak gehiago lortuko dugu. 1013 01:25:57,760 --> 01:25:59,900 Beraz, erabili identifikatzaile undeclared 'normal_settings'. 1014 01:25:59,900 --> 01:26:04,170 Nik ez nuen deitu normal_settings. It current_settings deitzen dut. 1015 01:26:04,170 --> 01:26:12,090 Hargatik aldatu hori guztia. 1016 01:26:17,920 --> 01:26:21,710 Orain argumentua pasatuz. 1017 01:26:26,290 --> 01:26:29,500 0 hau egin dut, oraingoz. 1018 01:26:29,500 --> 01:26:36,720 Ongi da. / Hacker_typer cp.c.. 1019 01:26:36,720 --> 01:26:39,590 Ez ere ez dut garbitu pantailaren hasieran. 1020 01:26:39,590 --> 01:26:42,960 Baina atzera begiratu dezakezu arazo azken multzo pantailan nola garbitu. 1021 01:26:42,960 --> 01:26:45,160 Besterik ez da zenbait karaktere inprimatzeko 1022 01:26:45,160 --> 01:26:47,210 hau da, zer egin nahi dut egiten. 1023 01:26:47,210 --> 01:26:48,900 Ongi da. 1024 01:26:48,900 --> 01:26:55,280 Eta zergatik behar ordez, stdin 0 izango pentsatuz, 1025 01:26:55,280 --> 01:27:00,560 behar da define 0 1026 01:27:00,560 --> 01:27:03,890 hau da, kexatzen 1027 01:27:13,150 --> 01:27:19,360 Ez dagoela fitxategi deskriptore esan dut, baina, ondoren, izan ere, zure FITXATEGIA * aurretik, 1028 01:27:19,360 --> 01:27:23,210 fitxategia deskriptorea bakarra zenbaki oso bat da, 1029 01:27:23,210 --> 01:27:26,970 FITXATEGIA * lotutako stuff sorta osoa dauka, berriz,. 1030 01:27:26,970 --> 01:27:30,380 0 esan ordez, stdin behar dugu arrazoia 1031 01:27:30,380 --> 01:27:37,480 stdin hori FITXATEGIA * gauza fitxategia deskriptorea 0 erreferentzia puntu bat da. 1032 01:27:37,480 --> 01:27:45,070 Beraz, nahiz eta hemen fopen do I (argv [1], * FITXATEGIA itzuli naiz. 1033 01:27:45,070 --> 01:27:51,180 Baina, nonbait, FITXATEGIA * horretan, fitxategi horren fitxategia deskriptorea dagokion gauza bat da. 1034 01:27:51,180 --> 01:27:57,430 Man orria begiratuz gero, irekita, eta, beraz, man 3 irekita egin duzu uste dut - Laguia 1035 01:27:57,430 --> 01:27:59,380 man 2 open - bai. 1036 01:27:59,380 --> 01:28:06,250 Irekitako orrian begiratuz gero, open behe-maila fopen bat bezalakoa da, 1037 01:28:06,250 --> 01:28:09,350 eta benetako fitxategia deskriptorea itzuli. 1038 01:28:09,350 --> 01:28:12,050 fopen irekita gainean stuff sorta bat egiten du, 1039 01:28:12,050 --> 01:28:17,640 besterik ez da fitxategi deskriptorea osoa FITXATEGIA bat itzultzen du * erakuslea itzuli ordez 1040 01:28:17,640 --> 01:28:20,590 barruan, gure fitxategia deskriptorea txiki da. 1041 01:28:20,590 --> 01:28:25,020 Beraz, FITXATEGIA * gauza aipatzen estandarra, 1042 01:28:25,020 --> 01:28:29,120 0 fitxategia deskriptorea berez estandarra aipatzen dute. 1043 01:28:29,120 --> 01:28:32,160 >> Zalantzak dituzu? 1044 01:28:32,160 --> 01:28:35,930 [Barreak] horren bidez nintzen. 1045 01:28:35,930 --> 01:28:39,140 Guztiak eskubidea. Egin gara. [Barreak] 1046 01:28:39,140 --> 01:28:42,000 >> [CS50.TV]