Ræðumaður: Svo langt, það er líklegt að flestir af áætlunum þínum hafa verið dálítið skammvinn. Þú keyra forrit eins og Mario eða gráðugur. Það er eitthvað, það hvetja kannski notandinn að einhverjum upplýsingum, prenta sumir framleiðsla á skjáinn, en svo þegar forritið þitt er yfir, það er í raun ekkert sem bendir það það var alltaf að keyra í fyrsta sæti. Ég meina, viss, þú gætir átt eftir það opnast í flugstöðinni glugga, en ef þú hreinsa skjáinn, það er í raun ekkert sem bendir til að það hafi verið. Við höfum ekki að geyma viðvarandi upplýsingar, upplýsingar sem er til eftir okkar áætlun hefur verið hætt, eða við höfum ekki fram að þessu. Sem betur fer þó, c er veita okkur með hæfileika til að gera þetta með því að innleiða eitthvað sem kallast skrá, uppbygging sem í grundvallaratriðum táknar skrá sem þú myndir tvöfalda smelltu á tölvunni þinni, ef þú ert er notað til að myndrænt notandi umhverfi. Almennt þegar unnið með c, erum við í raun að fara að vinna með ábendingar til files-- skrá stars-- nema smá þegar við tölum um núna þær aðgerðir sem vinna með skrá ábendingum. Þú þarft ekki að hafa raunverulega grafið of djúpt í skilning ábendingum sjálfir. Það er lítill teeny hluti þar sem við munum tala um þá, en yfirleitt skrá ábendingum og ábendingum, en innbyrðis, eru ekki nákvæmlega það sama. Nú hvað ég meina þegar Ég segi viðvarandi gögn? Hvað er viðvarandi gögn? Hvers vegna eigum við að hugsa um það? Segja, til dæmis, að þú ert að keyra forrit eða þú hefur endurskrifa a forrit sem er leikur, og þú vilt halda utan af öllum færist notandans þannig að kannski ef eitthvað fer úrskeiðis, þú getur skoðað skrána eftir leikinn. Það er það sem er átt við þegar við tala um viðvarandi gögnum. Í tengslum við að keyra þinn program, skrá er búin til. Og þegar program hefur verið hætt, að skrá er enn til staðar á kerfinu þínu. Og við getum litið á það og skoða það. Og svo að forritið væri stillt á hafa búið til nokkrar viðvarandi gögn, gögn til eftir áætluninni hefur lokið gangi. Nú allar þessar aðgerðir sem vinna með að búa til skrár og notfæra þá á ýmsa vegu búa í venjulegu io.h, sem er haus skrá sem þú hefur líklega verið pund þar á meðal efst á ansi mikið öll forrit vegna þess að það hluta er einhver The gagnlegur virka fyrir okkur, printf, sem einnig er hægt býr í venjulegu io.h. Svo þú þarft ekki að pund eru einhverjar fleiri skrár líklega í því skyni að vinna með skrá ábendingum. Nú hvert einasta skrá músina virka, eða hvert einasta skrá I / O, inntak úttak virka, tekur eins og einn af breytum þess eða inntak skrá pointer-- nema fyrir einn, fopen, sem er það sem þú notar til að fá skrána bendi í fyrsta sæti. En eftir að þú hefur opnað skrá og þú færð skrá ábendingum, þú getur þá framhjá þeim sem rök á ýmsum aðgerðum við erum að fara að tala um í dag, eins og heilbrigður eins og margir aðrir þannig að þú getur unnið með skrár. Þannig að það eru sex falleg Sameiginlegar grundvallarreglur sjálfur sem við erum að fara að tala um í dag. fopen og félagi hans virka fclose, fgetc og félagi virka fputc hennar, og fread og félagi hlutverk hennar, fwrite. Svo skulum við fá rétt inn í það. fopen-- hvað þýðir það að gera? Jæja, opnar það skrána og það gefur þér skráar bendil á það, þannig að þú getur þá notað sem skrá bendillinn sem rök að einhverju öðru skrá I / O aðgerðir. Mikilvægasti hlutur að muna með fopen er að eftir að þú hefur opnað skrá eða hringdi eins og einn hér, þú þarft að ganga úr skugga um að bendillinn að þú fékkst til baka er ekki jafn null. Ef þú hefur ekki horft á vídeó á ábendingum, þetta gæti ekki skynsamleg. En ef þú reynir og dereference a null músina muna, program mun líklega þjást a skiptingu [inaudible]. Við viljum vera viss um að við fékk lögmæt músina aftur. Mikill meirihluti af the tími við munum hafa fengið réttmæta músina aftur og það mun ekki vera vandamál. Svo hvernig gera við að hringja til fopen? Það lítur mjög mikið eins og þetta. File stjörnu ptr-- PTR vera almenn nefna að skrá pointer-- fopen og við fara í tvennt, skrá nafn og aðgerð við viljum takast á hendur. Svo héldum símtal sem lítur út eins this-- skrá stjörnu PTR 1 er fopen file1.txt. Og rekstur ég hef valið er r. Svo hvað finnst þér r er hér? Hvað eru tegundir af hlutum sem við gæti verið fær um að gera að skrá? Svo er r rekstur sem við velja þegar við viljum að lesa skrána. Svo væri í rauninni þegar við að hringja svona vera að fá oss skráar bendil þannig að við gætum þá lesa upplýsingar frá file1.txt. Á sama hátt gætum við opnað skrána 2.txt til að skrifa og svo við getum framhjá ptr2, bendils ég hef búið hér, sem rök hvaða aðgerð sem skrifar upplýsingar í skrá. Og svipað skrifa, það er einnig kostur á að bæta, a. Munurinn á milli skrifa og appending vera að þegar þú skrifar í skrá, ef þú hringir til að fopen til skriftar og að skrá er þegar til, það er að fara að skrifa allan skrá. Það er að fara að byrja í upphafi, eyða öllum upplýsingum það er nú þegar. En ef þú opnar það fyrir að bæta við, það mun fara til the endir af the skrá ef það er þegar texti í það eða upplýsingar í það, og það verður þá að byrja skrifa þaðan. Svo þú munt ekki missa eitthvað af Upplýsingarnar sem þú hefur gert áður. Hvort sem þú vilt að skrifa eða bæta konar fer eftir aðstæðum. En þú munt sennilega vita hvað rétt aðgerð er þegar tíminn kemur. Svo er það fopen. Hvað um fclose? Jæja, nokkuð einfaldlega, fclose bara tekur bendils. Og eins og þú might búast við, það lokar að skrá. Og þegar við höfum lokað skrá, getum við ekki framkvæma meira skrá I / O aðgerðir, lesa eða skrifa, á að skrá. Við verðum að opna aftur skrá í annað sinn í röð að halda áfram að vinna með það að nota I / O aðgerðir. Svo fclose leið við erum búin vinna með þessa skrá. Og allt sem við þurfum að fara í er heiti skráar bendil. Svo á par renna síðan, við fopened skrá 1 punktur texta fyrir lestur og við úthlutað að skráar bendil á ptr1. Nú höfum við ákveðið að við erum búinn að lesa frá því skrá. Við þurfum ekki að gera eitthvað meira með það. Við getum bara fclose ptr1. Og sömuleiðis, gætum við fclose hinna. Allt í lagi. Svo það er að opna og loka. Þeir eru tveir helstu að hefja starfsemi. Nú viljum við í raun gera nokkrar áhugaverðar efni, og fyrsta fall sem við munum sjá að mun gera það er fgetc-- skrá fá staf. Það er það sem fgetc almennt myndi þýða að. Markmið hennar í lífinu er að lesa næsta staf, eða ef þetta er þinn mjög Fyrra símtalið til fgetc ákveðinnar skrár, fyrsta staf. En síðan eftir það, þú fá næsta einn, Strax næsta eðli að skrá, og geymir þær í eðli breytu. Eins og við höfum gert hér, bleikju ll jafngildir fgetc, fara í heiti skráar músina. Aftur, það er mjög mikilvægt hér að muna að til þess að hafa þessi aðgerð að ná árangri, bendils sjálft hlýtur verið opnuð fyrir lestur. Við getum ekki lesið staf úr skrá bendillinn að við opnuðum fyrir að skrifa. Svo er það einn af takmarkanir fopen, ekki satt? Við verðum að takmarka okkur aðeins að skila eina aðgerð með einum skrá músina. Ef við vildum að lesa og skrifa frá sömu skrá, við hefðum opinn tvö aðskilin skrá ábendingum til sama file-- einn fyrir lestur, einn fyrir að skrifa. Svo aftur, eina ástæðan Ég koma að allt nú er því ef við erum að fara að hringja að fgetc, sem skrá músina hlýtur að hafa verið opnuð fyrir lestur. Og þá nokkuð einfaldlega, allt sem við þurfum að gera er fara í nafni skráar bendil. Svo bleikju ll jafngildir fgetc ptr1. Það er að fara að fá okkur næsta character-- eða aftur, ef þetta er fyrsta skipti sem við höfum gert þessa kalla, fyrsta character-- af hvað skrá er bent á að með því að ptr1. Muna að það var skrá 1 punktur texta. Það verður að fá fyrsta staf sem og við munum geyma það í breytu ll. Frekar einfalt. Þannig að við höfum aðeins litið á þremur virka og þegar við getur gert eitthvað sniðugt. Þannig að ef við tökum þessa getu um að fá persónu og við lykkja it-- svo við halda áfram að fá stafi úr skrá yfir og yfir og over-- nú við getur lesið hvert einasta eðli skrá. Og ef við prentað hvert eðli strax eftir að við að lesa hana, við höfum nú lesið úr skrá og prentuð innihaldi hennar á skjánum. Við höfum í raun concatenated að skrá á skjánum. Og það er það sem Linux stjórn köttur gerir. Ef þú slærð köttinn í skrá nafn, það mun prenta út allt innihald af skrá í flugstöðinni gluggann. Og svo þetta litla lykkja hér, aðeins þrjár línur af kóða, en það afrit raun Linux stjórn köttur. Svo gæti þetta setningafræði líta svolítið skrítið, en hér er það sem er að gerast hér. Þó ll jafngildir fgetc, PTR er ekki jafnt EOF-- það er allt munnfylli, en við skulum brjóta hann niður bara svo það er ljóst á setningafræði. Ég hef steypt hana fyrir sakir pláss, þó það er lítið setningafræðilega erfiður. Þannig að þetta hluti í græna hægri nú, hvað er það að gera? Jæja, það er bara fgetc kalla okkar, ekki satt? Við höfum séð það áður. Það er að fá einn persóna úr skrá. Þá erum við saman að eðli gegn EOF. EOF er sérstakt gildi sem er og skilgreint er í venjulegu io.h, sem er endir skrá staf. Svo í rauninni hvað er að fara að gerast er þetta lykkja mun lesa staf, bera saman það til EOF er enda skrá staf. Ef þeir passa ekki, þannig að við höfum ekki náð í lok skrárinnar, við munum prenta þessi karakter út. Þá munum við fara aftur til upphaf lykkju aftur. Við munum fá til persónu, athuga gegn EOF, prenta það út, og svo framvegis og svo framvegis og svo framvegis, lykkja í gegnum þannig fyrr en við höfum náð í lok skrá. Og þá með þeim tímapunkti, við munum hafa prentað út allt innihald af the skrá. Svo aftur, höfum við aðeins séð fopen, fclose og fgetc og þegar við getum afrit a Linux flugstöðinni stjórn. Eins og ég sagði í upphafi, við höfðum fgetc og fputc, og fputc var félagi hlutverk fgetc. Og svo, eins og þú might ímynda sér, það er að skrifa jafngildi. Það gerir okkur kleift að skrifa einn staf í skrá. Again, hellir vera, bara eins og það var með fgetc, skrá sem við erum að skrifa til hlýt verið opnaði fyrir skriflega eða fyrir appending. Ef við reynum og nota fputc á skrá sem við höfum opnað fyrir lestur, við erum að fara að þjást smá mistök. En kallið er frekar einfalt. fputc höfuðborg A ptr2, allt það er að fara að gera er að það er að fara að skrifa bréf í A í skrá 2 punktur Textinn, sem hét því skrá sem við opnuðum og úthlutað bendillinn að ptr2. Þannig að við erum að fara að skrifa höfuðborg A til að skrá 2 punktur texta. Og við munum skrifa upphrópunarmerki benda til að skrá 3 punktur Textinn, sem var bent á að með því að ptr3. Svo aftur, frekar einfalt hér. En nú getum við gert annar hlutur. Við höfum þetta dæmi við vorum bara að fara yfir um að vera fær um að endurtaka köttinn Linux stjórn, sá sem prentar út á skjáinn. Jæja, nú þegar við höfum getu að lesa stafi og skrár og skrifa stafi í skrár, Hvers vegna eigum við ekki að skipta bara að kalla til printf með símtali til fputc. Og nú höfum við tvöfalt CP, mjög einfalt Linux stjórn sem við ræddum um leið langur síðan í Linux skipanir vídeó. Við höfum í raun tvöfalt það hérna. Við erum að lesa staf og þá erum við skrifa þessi karakter til aðra skrá. Lesa úr einni skrá, skrifa til annars, aftur og aftur og aftur þangað til við högg EOF. Við verðum að loka á skrá við erum að reyna að afrita úr. Og með því að við munum hafa skrifað allt af persónum sem við þurfum til að skrá sem við erum að skrifa í. Svo er þetta cp, Linux afrit stjórn. Í upphafi þetta video, ég hafði hellir að við myndum tala a svolítið um ábendingum. Hér er sérstaklega þar sem við erum að fara að tala um ábendingum auk skrá ábendingum. Svo þessi aðgerð lítur svona skelfilegt. Það fékk nokkrum þáttum. Það er mikið um að vera hér. There 'a einhver fjöldi af mismunandi liti og texta. En í raun, það er bara almenn útgáfa af fgetc sem gerir okkur kleift að fá eitthvað magn upplýsinga. Það getur verið svolítið óhagkvæm ef við erum fá stafina eitt í einu, iterating gegnum skrána einn staf í einu. Myndi það ekki vera ágætur að fá 100 á sama tíma eða 500 í einu? Jæja, fread og félagi hlutverk þess fwrite, sem við munum tala um í annað, leyfa okkur að gera einmitt þetta. Við getum lesið handahófi magn upplýsinga úr skrá og við geyma það einhvers staðar tímabundið. Í stað þess að vera fær um að bara passa hana í einni breytu, við gætum þurft að geyma það í fjölda. Og svo, fara við fjórum rök að fread-- músina á stað þar sem við erum að geyma upplýsingar, hversu stór hver eining upplýsinga verður, hversu margar einingar af upplýsingum við viljum að kaupa, og frá sem skrá við viljum fá þá. Sennilega best sýnt með dæmi hér. Svo skulum segja að við lýsa fjölbreytta 10 heiltölur. Við höfum bara lýst á stafla geðþótta int arr 10. Svo er það frekar einfalt. Nú er það sem við erum að gera þó að frecall er við erum að lesa stærð int sinnum 10 bæti af upplýsingum. Stærð int veru four-- það er stærð heiltölu c. Svo er það sem við erum að gera og við erum að lesa 40 bytes virði af upplýsingum úr skrá bent á að með því að PTR. Og við erum að geyma þá 40 bytes einhversstaðar þar sem við höfum sett til hliðar 40 bytes virði af minni. Sem betur fer, höfum við þegar gert það með því að lýsa hverfi, að array þarna. Það er fær um að halda 10 fjögurra bæti einingar. Svo í alls, það er hægt að halda 40 bytes virði af upplýsingum. Og við erum nú að lesa 40 bæti upplýsinga frá the skrá, og við erum að geyma það í samkl. Muna frá the vídeó á ábendingum sem nafn fylki, svo sem samkl, er í raun bara bendi í fyrsta þáttur þess. Svo þegar við framhjá í samkomulagi þar, við eru í raun brottför í músina. Á sama hátt getum við gert this-- við gerum ekki endilega þarf að vista biðminni okkar á mánudaginn. Við gætum einnig virk úthluta a biðminni svona með malloc. Mundu að þegar við virk úthluta minni, við erum að vista það á hrúga ekki stafla. En það er samt biðminni. Það enn, í þessu tilfelli, er halda 640 bæti af upplýsingum því tvöfaldur tekur upp átta bæti. Og við erum að biðja um 80 af þeim. Við viljum hafa pláss að halda 80 tvöfaldar. Svo 80 sinnum 8 er 640 bæti upplýsingar. Og að kalla að fread er safna 640 bæti af upplýsingum frá skrá benti til eftir PTR og geyma það nú í arr2. Nú getum við einnig að meðhöndla fread bara eins og kalla til fgetc. Í þessu tilfelli erum við bara að reyna að fá einn staf af skrá. Og við þurfum ekki array að halda karakter. Við getum bara geyma það í eðli breyta. Veiða, þó, er að þegar við höfum bara breytu, við þurfum að fara í heimilisfang breytunni vegna muna að Fyrsta rök að fread er bendi á staðsetningu og minni þar sem við viljum geyma upplýsingar. Again, nafn sem array er bendi. Þannig að við þurfum ekki að gera merkið fylkisins. En c, eðli c hér, er ekki fylki. Það er bara breyta. Og svo þurfum við að fara að merkið c að kynna að það er netfang þar sem við viljum til að geyma eitt bæti af upplýsingum, þetta einn staf sem við erum að safna frá PTR. Fwrite-- Ég fer í gegnum þetta aðeins meira quickly-- er laglegur mikill the Nákvæm jafnvirði fread nema það er til að skrifa á í stað þess að lesa bara eins og other-- við höfum haft opið og loka, fá staf, skrifa staf. Nú er það að fá handahófskennt magn upplýsinga, rétt handahófskennt magn upplýsinga. Svo bara eins og áður, við getum hafa fjölbreytta 10 heiltölur þar sem við höfum nú þegar upplýsingar sem geymdar eru, kannski. Það var líklega nokkrar línur af kóða sem ætti að fara á milli þessara tveggja þar sem ég fylla samkomulagi við eitthvað þroskandi. Ég fylla það með 10 mismunandi heiltölur. Og í staðinn, það sem ég er að gera er að skrifa frá samkomulagi og safna upplýsingum frá samkl. Og ég ætla að taka þessar upplýsingar og setja það inn í skrána. Svo í stað þess að það sé frá skrána í buffer, við erum nú að fara frá biðminni til að skrá. Svo er það bara hið gagnstæða. Svo aftur, bara eins og áður, við getum einnig hafa hrúga klumpur af minni sem við höfum virk úthlutað og lesa frá því og skrifa að skránni. Og við höfum einnig einn breytu fær um að halda eitt bæti upplýsinga, svo sem persónu. En aftur, við þurfum að fara í veffang breytunni þegar við viljum til að lesa úr því. Þannig að við getum skrifað upplýsingar við finnum á þetta netfang að skrá músina, PTR. Það er hellingur af öðrum mikill skrá I / O aðgerðir að gera ýmislegt fyrir utan þær sem við höfum talað um í dag. A par af þeim sem þú gætir fundið gagnlegar eru fgets og fputs, sem eru ígildi af fgetc og fputc en að lesa einum streng úr skrá. Í stað þess að einni persónu, það verður að lesa heilt band. fprintf, sem í grundvallaratriðum gerir þú þarft að nota printf að skrifa í skrána. Svo bara eins og þú getur gert það breyta skipting með sem tákn prósent i og prósent d, og svo framvegis, með printf þú getur álíka tekið printf string og prenta eitthvað svona í skrá. fseek-- ef þú ert með DVD spilara er hliðstæðan sem ég nota venjulega here-- er tegund af eins og með þinn baka og fljótur fram hnappa til að fletta í myndinni. Á sama hátt getur þú fært um skrá. Eitt af því sem inni að skrá uppbygging sem c skapar fyrir þig er vísbending því hvar þú ert í skránni. Ert þú á mjög upphaf, bæti núll? Ert þú á bæti 100, bæti 1000, og svo framvegis? Þú getur notað fseek að geðþótta færa sem vísir áfram eða afturábak. Og ftell aftur svipað DVD spilara, er eins og lítið klukka sem segir hversu margar mínútur og sekúndur þú eru í tiltekinni bíómynd. Á sama hátt, ftell segir þér hvernig margir bæti þú ert inn í skrána. feof er öðruvísi útgáfa um að greina hvort þú hafir náð í lok skrárinnar. Og ferror er fall að þú getur notað að greina hvort eitthvað hefur farið úrskeiðis vinna með skrá. Aftur, þetta er bara klóra yfirborðið. Það er enn nóg meira skrá I / O aðgerðir í stöðluðu io.h. En þetta mun sennilega fá þér byrjaði að vinna með skrá ábendingum. Ég er Doug Lloyd. Þetta er CS50.