SPEAKER: S'issa, huwa probabbli li ħafna mill-programmi tiegħek Kien daqsxejn effimeru. Inti tmexxi programm bħal Mario jew greedy. Hija ma xi ħaġa, forsi tinkoraġġixxi l-utent għal xi informazzjoni, jistampaw xi output għall-iskrin, iżda mbagħad meta program tiegħek huwa fuq, hemm verament ebda evidenza hemmhekk kien qatt run fl-ewwel post. I mean, żgur, inti jista 'jkollok xellug hija miftuħa fit-tieqa terminal, imma jekk inti ċar l-iskrin tiegħek, hemm verament ebda evidenza li kien jeżisti. Aħna ma jkollhom mezz ta 'ħażna informazzjoni persistenti, informazzjoni li teżisti wara tagħna programm tkun waqfet taħdem, jew aħna ma sa dan il-punt. Fortunatament għalkemm, c ma tagħtina l-abbiltà biex jagħmlu dan billi jimplimentaw xi ħaġa imsejħa fajl, struttura li bażikament jirrappreżenta fajl li inti doppju ikklikkja fuq il-kompjuter tiegħek, jekk int użat għal ambjent grafika user. Ġeneralment meta jsir xogħol ma ċ, aħna qed attwalment ser tkun ħidma mal pointers li files-- fajl stars-- ħlief għal ftit meta nitkellmu dwar koppja tal-funzjonijiet li jaħdmu ma 'fajl pointers. Inti ma għandekx bżonn li jkollhom verament dug wisq fil-fond fil-fehim pointers infushom. Hemm daqsxejn teeny ftit fejn aħna se nitkellmu dwarhom, iżda ġeneralment fajl pointers u pointers, filwaqt interrelatati, mhumiex eżattament l-istess ħaġa. Issa dak li għandi jfisser meta I say data persistenti? Xi tkun dejta persistenti? Għalfejn nagħmlu tinteressana? Say, per eżempju, li int tmexxi programm jew inti ħadthom miktuba mill-ġdid ta ' programm li l-logħba, u inti tixtieq li jżommu rekord ta 'kollha ta' jiċċaqlaq l-utent b'tali mod li forsi jekk xi ħaġa tmur ħażin, inti tista 'tirrevedi l-fajl wara l-logħba. Dak hu li rridu nfissru meta aħna jitkellmu dwar data persistenti. Fil-kors ta 'tmexxija tiegħek programm, fajl hija maħluqa. U meta program tiegħek tkun waqfet taħdem, dan il-fajl tkun għadha teżisti fis-sistema tiegħek. U nistgħu nħarsu lejn din u teżaminaha. U għalhekk dak il-programm ikun stabbilit li ħolqu xi data persistenti, Jeżistu data wara l-programm tkun spiċċat taħdem. Issa kollha ta 'dawn il-funzjonijiet li jaħdmu ma ħolqien ta 'fajls u timmanipula minnhom fil-modi varji jgħixu fl io.h standard, li huwa fajl header li inti ħadthom probabbli ġiet lira inkluż fil-quċċata tal pretty ħafna kollha ta 'programmi tiegħek għax fih wieħed mill- funzjonijiet l-aktar utli għalina, printf, li wkoll tikri jgħix fil io.h. standard Allura inti m'għandekx bżonn lira jinkludu xi fajls addizzjonali probabbilment sabiex jaħdmu ma 'fajl pointers. Issa kull funzjoni waħda fajl pointer, jew kull fajl waħdieni I / O, il-produzzjoni input , il-funzjoni taċċetta bħala wieħed tal parametri jew inputs tagħha a Pointer fajl ħlief għal wieħed, fopen, li huwa dak li tuża biex tikseb l-fajl pointer fl-ewwel post. Iżda wara li tkun ħadthom fetħet il- fajl u ikollok fajl pointers, inti tista 'mbagħad tgħaddi minnhom bħala argumenti mad-diversi funzjonijiet aħna qed tmur biex jitkellmu dwar illum, kif ukoll ħafna oħrajn sabiex inti tista 'taħdem ma' fajls. Allura hemm sitta pretty dawk bażiku komuni li aħna qed tmur biex jitkellmu dwar llum. fopen u ħbieb tagħha fclose funzjoni, fgetc u fputc funzjoni ħbieb tagħha, u fread u l-funzjoni ħbieb tiegħu, fwrite. Mela ejja tikseb id-dritt fis dan. fopen-- dak ma tagħmel? Ukoll, tiftaħ fajl u jagħtik pointer fajl lilha, sabiex inti tista 'mbagħad jużaw dak fajl pointer bħala argument għal xi wieħed minn I / O funzjonijiet fajl oħra. L-aktar ħaġa importanti li niftakar fopen huwa li wara li tkun fetħet il- fajl jew għamlet sejħa bħal dak hawn, għandek bżonn biex jivverifika sabiex ikun żgur li l-pointer li inti marret lura mhuwiex ugwali għal nulla. Jekk int ma jaraw l-video fuq pointers, dan ma jista 'jagħmel sens. Imma jekk inti tipprova u dereference sejħa lura pointer null, programm tiegħek probabbilment se jsofru segmentazzjoni [inaudible]. Aħna tixtieq li tagħmel ċert li aħna ltqajna lura pointer leġittimu. Il-maġġoranza vasta tal-ħin aħna se gotten pointer leġittimu lura u mhux se tkun problema. Allura kif nistgħu jagħmlu sejħa għal fopen? Huwa jistenna pretty ħafna bħal dan. File star ptr-- PTR tkun ġeneriku isem għal fajl Pointer fopen u aħna jgħaddu f'żewġ affarijiet, isem fajl u operazzjoni rridu li jagħmlu. Allura aħna jista 'jkollhom sejħa li qisu this-- fajl star PTR 1 huwa ugwali għal fopen file1.txt. U l-operazzjoni stajt magħżul huwa r. Allura dak li taħseb r huwa hawnhekk? X'inhuma t-tipi ta 'affarijiet aħna jista 'jkun kapaċi li jagħmlu għall-fajls? Allura r huwa l-operazzjoni li aħna jagħżlu meta irridu li jaqra fajl. Allura aħna se bażikament meta nagħmlu sejħa bħal dan qegħdin ikunu ruħna pointer fajl tali li nistgħu mbagħad jaqra l-informazzjoni minn file1.txt. Bl-istess mod, nistgħu tiftaħ fajl 2.txt għall-kitba u hekk nistgħu jgħaddu ptr2, il pointer fajl stajt maħluqa hawnhekk, bħala argument għal kull funzjoni li jikteb informazzjoni għall-fajl. U simili għall-kitba, hemm ukoll l-għażla li tehmeż, a. Id-differenza bejn miktub u jpoġġu tkun li meta tikteb għall-fajl, jekk inti tagħmel sejħa biex fopen għall-kitba u dan il-fajl diġà jeżisti, huwa ser jissostitwixxu l-fajl kollu. Li għaddej biex tibda fil-bidu nett, tħassar l-informazzjoni kollha li diġà hemm. Billi jekk inti tiftaħ lilha għall jpoġġu, se jmorru sa l-aħħar tal-fajl jekk diġà hemm test fil jew informazzjoni fiha, u mbagħad se tibda miktub minn hemm. Allura inti mhux se jitlef l-ebda mill- informazzjoni li inti ghamilt qabel. Jekk inti tixtieq li jiktbu jew tehmeż tip ta 'tiddependi fuq is-sitwazzjoni. Imma inti probabilment taf x'inhuma l- operazzjoni dritt huwa meta jasal iż-żmien. Allura dak fopen. Xi ngħidu dwar fclose? Well, pretty sempliċi, fclose biss taċċetta l-pointer fajl. U kif inti tista 'tistenna, li jagħlaq dan il-fajl. U ladarba aħna ħadthom magħluqa fajl, ma nistgħux iwettaq kwalunkwe I / funzjonijiet O fajl aktar, qari jew bil-miktub, fuq dan il-fajl. Aħna jkollhom jerġgħu jiftħu l- fajl ieħor żmien sabiex biex tkompli taħdem ma billi tuża l-funzjonijiet I / O. Mezzi hekk fclose aħna qed isir ħidma ma dan il-fajl. U kollha għandna bżonn li jgħaddu fil hija l-isem ta 'pointer fajl. Allura fuq koppja slides ilu, aħna fopened fajl 1 dot test għall-qari u aħna assenjati li fajl pointer li ptr1. Issa aħna iddeċidejt aħna isir qari minn dan il-fajl. Aħna ma bżonn tagħmel xi aktar magħha. Nistgħu ptr1 biss fclose. U l-istess, nistgħu fclose-oħrajn. Kull dritt. Allura dak ftuħ u għeluq. Dawk huma ż-żewġ bażiku operazzjonijiet tal-bidu. Issa rridu li attwalment jagħmlu xi għalf interessanti, u l-ewwel funzjoni li aħna ser tara li se tagħmel dan huwa fgetc-- fajl tikseb karattru. Dak hu fgetc ġeneralment tkun tfisser. Għan tagħha fil-ħajja huwa li aqra l-karattru li jmiss, jew jekk dan huwa ħafna tiegħek ewwel sejħa għall fgetc għal fajl partikolari, l-ewwel karattru. Iżda mbagħad wara dan, ikollok dak li jmiss, il-karattru stess li jmiss ta 'dan il-fajl, u tirreġistrahom ġo varjabbli karattru. Kif aħna ghamilt hawn, ch char ugwali fgetc, jgħaddu fl-isem ta 'pointer fajl. Għal darb'oħra, huwa ferm importanti li wieħed jiftakar hawnhekk li sabiex ikollhom din l-operazzjoni tirnexxi, il pointer fajl innifsu must've infetħet għall-qari. Aħna ma tistax taqra karattru minn fajl pointer li aħna miftuħa għall-kitba. B'tali mod li wieħed mill- limitazzjonijiet ta 'fopen, id-dritt? Irridu jirrestrinġu lilna nfusna biss jwettqu operazzjoni waħda mal-fajl pointer waħda. Jekk ridna biex jaqraw u jiktbu mill-istess fajl, rridu naraw miftuħa żewġ separati fajl indikaturi għall-istess file-- wieħed għall-qari, wieħed għall-kitba. Għalhekk għal darb'oħra, l-unika raġuni I idaħħlu dak up issa huwa għaliex jekk aħna qed tmur biex tagħmel sejħa li fgetc, li must've fajl pointer infetħet għall-qari. U mbagħad pretty sempliċi, kollha għandna bżonn tagħmel huwa jgħaddi fl-isem tal-pointer fajl. Allura ch char ugwali ptr1 fgetc. Li għaddej biex nikseb us l character-- jmiss jew għal darb'oħra, jekk dan huwa l-ewwel iż-żmien aħna ħadna din is-sejħa, l-ewwel character-- ta 'kwalunkwe fajl huwa indikat permezz ptr1. Ifakkar li dan kien fajl 1 dot test. Hija ser tingħata l-ewwel tip ta 'dak u aħna ser jaħżnu fil-ch varjabbli. Pretty sempliċi. Allura konna biss ħares lejn tliet funzjonijiet u diġà għandna tista 'tagħmel xi ħaġa pretty pulita. Mela jekk nieħdu din il-ħila ta 'jkollna karattru u aħna loop it-- hekk aħna tkompli tikseb karattri minn fajl fuq u aktar u over-- issa aħna tista 'taqra kull wieħed karattru ta 'fajl. U jekk aħna istampar kull karattru immedjatament wara naqraw dan, aħna issa tinqara minn fajl u stampati kontenut tiegħu għall-iskrin. Imxejna effettiv concatenated dan il-fajl fuq l-iskrin. U dan huwa dak li l- Linux qattus kmand ma. Jekk inti tip qattus fl-isem fajl, se jistampa l-kontenut kollu tal-fajl fil-tieqa terminal tiegħek. U hekk dan loop ftit hawn, biss tliet linji ta 'kodiċi, iżda effettivament duplikati il-qattus kmand Linux. Allura dan sintassi jista tfittex ftit stramb, iżda hawnhekk huwa dak li qed jiġri hawn. Filwaqt ch ugwali fgetc, PTR mhuwiex daqs EOF-- huwa f'gidma kollu, imma ejja din tinqasam biss dan huwa ċar fuq il-sintassi. Stajt konsolidati it għall-fini ta 'spazju, għalkemm huwa ftit sintattikament delikata. Allura din il-parti bi dritt aħdar issa, dak li huwa dan isir? Ukoll, li jinsab biss sejħa fgetc tagħna, id-dritt? Rajna li qabel. Huwa jikseb wieħed karattru mill-fajl. Imbagħad inqabblu li karattru kontra EOF. EOF huwa valur speċjali li l- definit fl io.h standard, li hija t-tmiem ta 'karattru fajl. Allura bażikament dak li jiġri huwa dan loop se jaqra karattru, titqabbel ma EOF, l- aħħar ta 'karattru fajl. Jekk dawn ma jaqblux, hekk aħna ma laħqu t-tmiem tal-fajl, aħna ser jistampa dan il-karattru out. Imbagħad aħna ser imorru lura għall- bidu tal-linja mill-ġdid. Aħna ser jiksbu karattru, check kontra EOF, ipprintjaha, u l-bqija u hekk u hekk, looping permezz b'dan il-mod sakemm konna laħqu t-tmiem tal-fajl. U mbagħad minn dak il-punt, se jkollna stampat l-kontenut kollu tal-fajl. Għalhekk għal darb'oħra, konna biss raw fopen, fclose, u fgetc u diġà nistgħu duplikat kmand terminal Linux. Kif għidt fil-bidu, kellna fgetc u fputc, u fputc kienet l-ħbieb funzjoni ta 'fgetc. U hekk, kif inti tista 'timmaġina, huwa l-kitba ekwivalenti. Dan jippermetti li jiktbu karattru wieħed għall-fajl. Għal darb'oħra, il-twiddiba li jkunu, just bhalu kien bil fgetc, il-fajl li aħna qed miktub lill must've kien miftuħa għall-kitba jew għat jpoġġu. Jekk nippruvaw u l-użu fputc fuq fajl li konna miftuħa għall-qari, aħna qed tmur biex jsofru daqsxejn ta 'żball. Iżda l-sejħa hija pjuttost sempliċi. kapital fputc A ptr2, Kollha li għaddej biex tagħmel huwa huwa ser jikteb l-ittra f 'A fil-fajl 2 dot test, li kien l-isem tal- fajl li aħna miftuħa u assenjati l-pointer li ptr2. Allura aħna qed tmur biex jiktbu kapital A għall-fajl 2. dot test. U aħna ser jiktbu exclamation punt għall-fajl 3 dot test, li ġie indikat mill ptr3. Għalhekk għal darb'oħra, pjuttost sempliċi hawn. Imma issa nistgħu nagħmlu ħaġa oħra. Għandna dan l-eżempju konna biss jmorru fuq dwar il-kapaċità li tiġi replikata l-qattus Linux kmand, il-wieħed li tistampa għall-iskrin. Ukoll, issa li għandna l-ħila li jaqra karattri mill-fajls u jiktbu karattri għall-fajls, għaliex ma aħna biss tissostitwixxi dik sejħa biex printf ma 'sejħa għal fputc. U issa konna idduplikata cp, kmand bażika ħafna Linux li tkellimna dwar l bogħod ilu fil-Linux jikkmanda video. Imxejna effettiv duplikata dan id-dritt hawn. We qed taqra karattru u allura aħna qed miktub li karattru għall-fajl ieħor. Qari minn wieħed fajl, kitba għall-ieħor, aktar u aktar u aktar mill-ġdid sakemm aħna hit EOF. Imxejna ltqajna l-aħħar tal- fajl aħna qed jippruvaw jikkupjaw. U minn dak aħna ser kitbu kollha tal-karattri għandna bżonn għall-fajl li aħna qed miktub lill. Allura dan huwa cp, il-kopja kmand Linux. Fil-bidu nett tal dan il-video, kelli l-twiddiba li aħna se nitkellmu a ftit dwar pointers. Hawnhekk huwa speċifikament fejn aħna qed ser jitkellmu dwar pointers minbarra għall-fajl pointers. Allura din il-funzjoni jistenna tip ta 'scary. Huwa ltqajna diversi parametri. Hemm ħafna jiġri hawn fuq. Hemm ħafna ta 'differenti kuluri u testi. Imma verament, huwa biss l- verżjoni ġenerika ta fgetc li jippermetti li jiksbu kwalunkwe ammont ta 'informazzjoni. Hija tista 'tkun daqsxejn ineffiċjenti jekk aħna qed jkollna karattri wieħed fi żmien, mtennija permezz tal-fajl karattru wieħed kull darba. Mhux se jkun nicer li tikseb 100 fi żmien jew 500 fi żmien? Well, fread u l-funzjoni ħbieb tagħha fwrite, li aħna ser nitkellmu dwar fit-tieni, inessu tagħmel dan. Aħna tista 'taqra l-ammont arbitrarju ta 'informazzjoni minn fajl u aħna jaħżnu x'imkien temporanjament. Minflok li tkun tista 'biss tajbin fil-varjabbli waħda, nistgħu bżonn biex jaħżnuh fil-firxa. U hekk, aħna jgħaddu f'erba argumenti li fread-- pointer għall-post fejn aħna qed se jaħżnu l-informazzjoni, kemm tkun kbira kull unità ta 'informazzjoni se jkun, kemm unitajiet ta 'informazzjoni irridu li jakkwista, u minn li fajl irridu li tikseb minnhom. Probabbilment l-aħjar illustrati ma 'eżempju hawn. Mela ejja ngħidu li aħna niddikjaraw firxa ta '10 interi. Imxejna biss dikjarat fuq it munzell arbitrarju int arr 10. Allura dak pjuttost sempliċi. Issa dak li aħna qed tagħmel għalkemm huwa l- frecall huwa we qed taqra daqs ta 'int ħinijiet 10 bytes ta 'informazzjoni. Daqs tal int benessri four-- li l- id-daqs ta 'numru sħiħ fi c. Allura dak li aħna qed tagħmel hija aħna qed taqra 40 bytes jiswew ta 'informazzjoni mill-fajl indikat mill PTR. U aħna qed ħażna dawk 40 bytes x'imkien fejn għandna imwarrba 40 bytes valur ta 'memorja. Fortunatament, aħna stajt diġà għamlu dan mill tiddikjara arr, li array hemm dritt. Li huwa kapaċi ta holding 10 unitajiet ta 'erba' bytes. Allura b'kollox, hija tista 'żżomm 40 bytes jiswew ta 'informazzjoni. U aħna issa qegħdin qari 40 bytes ta 'informazzjoni mill-fajl, u aħna qed maħżuna fil arr. Jitlob lura mingħandhom il-video fuq pointers li l-isem ta 'firxa, bħal arr, huwa verament ftit pointer l-ewwel element tagħha. Allura meta aħna jgħaddu fil arr hemmhekk, aħna huma, fil-fatt, li jgħaddi fil-pointer. Bl-istess mod nistgħu nagħmlu this-- aħna ma neċessarjament bżonn biex jiffrankaw buffer tagħna fuq il-munzell. Nistgħu wkoll dinamiku jalloka a buffer bħal dan, bl-użu malloc. Ftakar, meta aħna dinamiku jallokaw memorja, aħna qed iffrankar fuq il- munzell, mhux il-munzell. Iżda huwa għadu buffer. Hija xorta, f'dan il-każ, huwa żamma 640 bytes ta 'informazzjoni minħabba doppja jieħu tmien bytes. U aħna qed tistaqsi għal 80 minnhom. Aħna rridu li jkollhom spazju li jżommu 80 jirdoppja. Allura 80 darba 8 huwa 640 bytes informazzjoni. U dik is-sejħa għall fread huwa ġbir 640 bytes ta 'informazzjoni mill osservat il-fajl mill PTR u maħżuna issa fil arr2. Issa nistgħu wkoll iqisu fread bħad sejħa għall fgetc. F'dan il-każ, aħna qed biss tipprova tikseb karattru wieħed mill-fajl. U aħna ma bżonn array li jkollhom karattru. Nistgħu biss jaħżen fil varjabbli karattru. Il-qabda, għalkemm, hi li meta aħna biss ikollhom varjabbli, għandna bżonn li jgħaddu fil- indirizz ta 'dak il-varjabbli minħabba irtirar li l- ewwel argument li fread huwa pointer għall-post u l-memorja fejn irridu biex jaħżnu l-informazzjoni. Għal darb'oħra, l-isem ta ' firxa hija pointer. Allura aħna ma bżonn tagħmel firxa ampersand. Iżda ċ, il-karattru c hawn, mhuwiex firxa. Huwa biss varjabbli. U għalhekk għandna bżonn li tgħaddi minn ampersand c biex jindikaw li dak l-indirizz fejn irridu li jaħżen din byte wieħed ta 'informazzjoni, dan il-karattru wieħed li aħna qed ġbir mill PTR. Fwrite-- I ser jgħaddu dan ftit aktar quickly-- hija pjuttost l- ekwivalenti eżatt ta 'fread ħlief huwa għall-kitba minflok qari, just bħall-other-- aħna kellna miftuħa u qrib, jiksbu karattru, jiktbu karattru. Issa huwa jiksbu arbitrarja ammont ta 'informazzjoni, ammont arbitrarja dritt ta 'informazzjoni. Hekk biss bħal qabel, nistgħu jkollhom firxa ta '10 numri interi fejn diġà għandna informazzjoni maħżuna, forsi. Kien probabbilment xi linji ta 'kodiċi li għandha jgħaddi minn bejn dawn iż-żewġ fejn I imla arr bil xi ħaġa sinifikanti. I imla bil '10 interi differenti. U minflok, dak li jien tagħmel huwa miktub minn arr u l-ġbir tal-informazzjoni mill arr. U jien tieħu dik l-informazzjoni u t-tqegħid fil-fajl. Allura minflok ma jkun mill l-fajl lill-buffer, aħna issa qed tmur minn l buffer għall-fajl. Allura huwa biss il-maqlub. Għalhekk għal darb'oħra, bħad qabel, nistgħu għandhom ukoll blokki ta 'memorja borġ li konna dinamikament allokati u tinqara minn dik u jiktbu li għall-fajl. U aħna għandna wkoll varjabbli waħda kapaċi li jżommu byte wieħed ta 'informazzjoni, bħal karattru. Iżda għal darb'oħra, għandna bżonn li jgħaddu fil l-indirizz ta 'dak il-varjabbli meta rridu li jaqra minnha. Allura nistgħu tikteb l-informazzjoni insibu f'dak l-indirizz l-pointer fajl, PTR. Hemm lottijiet ta 'oħrajn fajl kbir I / O funzjonijiet li tagħmel affarijiet varji minbarra dawk konna tkellimna dwar llum. Koppja ta 'dawk inti tista 'ssib utli huma fgets u fputs, li huma l-ekwivalenti tal fgetc u fputc iżda għall-qari string wieħed minn fajl. Minflok ta 'karattru wieħed, se jaqra string kollu. fprintf, li bażikament tippermetti biex tuża printf li tikteb għall-fajl. Hekk biss bħal inti tista 'tagħmel l- sostituzzjoni varjabbli użu l i placeholders mija u mija d, u l-bqija, ma printf inti tista 'bl-istess mod tieħu l- string printf u xi ħaġa print bħal dik għall-fajl. fseek-- jekk għandek DVD player huwa l-analoġija I normalment jużaw here-- huwa tip ta bħall-użu tiegħek kontrina u veloċi quddiem buttuni li jiċċaqalqu madwar l-film. Bl-istess mod, inti tista 'timxi madwar il-fajl. Waħda mill-affarijiet ġewwa li istruttura tal-fajl li ċ toħloq għalik huwa indikatur ta 'fejn inti fil-fajl. Inti fil-ħafna bidu, fil byte żero? Inti fil byte 100, byte 1000, u l-bqija? Tista 'tuża fseek biex jimxu b'mod arbitrarju dak l-indikatur quddiem jew lura. U ftell, għal darb'oħra simili għal DVD player, huwa bħal arloġġ ftit li tg inti kemm minuti u sekondi inti huma fi movie partikolari. Bl-istess mod, ftell jgħidlek kif ħafna bytes inti fis-fajl. feof huwa verżjoni differenti ta 'sejbien jekk inti stajt laħqu t-tmiem tal-fajl. U ferror hija funzjoni li tista 'tuża biex jiskopru jekk ikunx xi ħaġa għandha marret ħidma ħażin bil-fajl. Għal darb'oħra, dan huwa biss grif tal-wiċċ. Hemm għadu ħafna aktar file I / O funzjonijiet fil-io.h. standard Iżda dan probabbilment se tikseb inti bdiet taħdem ma 'fajl pointers. Jien Doug Lloyd. Dan huwa CS50.