Oratè: Se konsa, lwen, li la gen anpil chans ki pi fò nan pwogram ou yo te yon ti jan efemèr. Ou kouri nan yon pwogram tankou Mario oswa visye. Li fè yon bagay, li petèt envit kap itilize li an pou kèk enfòmasyon, enprime kèk pwodiksyon nan ekran an, men Lè sa a lè pwogram ou an sou yo, gen nan reyèlman okenn prèv gen li te tout tan tout tan kouri nan plas an premye. Mwen vle di, asire w, ou ta ka te kite li louvri nan fennèt la tèminal, men si ou klè ekran ou a, gen nan reyèlman okenn prèv ki montre li te egziste. Nou pa gen yon mwayen pou estoke enfòmasyon ki pèsistan, enfòmasyon ki egziste apre nou an Pwogram sispann kouri, oswa nou pa gen jiska pwen sa a. Erezman menm si, c fè bay nou ak kapasite nan fè sa pa mete ann aplikasyon yon bagay yo rele yon dosye, yon estrikti ki fondamantalman reprezante yon dosye ke ou ta double klike sou òdinatè w lan, si w ap itilize nan yon anviwònman utilisateur grafik. Anjeneral lè w ap travay ak c, nou ap aktyèlman ale nan dwe ap travay ak endikasyon files-- dosye stars-- eksepte pou yon ti jan lè nou pale sou yon koup nan fonksyon yo ki travay avèk endikasyon dosye-a. Ou pa bezwen te reyèlman fouye twò fon nan konpreyansyon endikasyon tèt yo. Genyen yon ti kras ti jan minuskul kote nou pral pale sou yo, men jeneralman ranpli endikasyon ak endikasyon, pandan y ap relye, yo pa egzakteman menm bagay la. Kounye a ki sa mwen vle di lè M 'ap di done ki pèsistan? Ki sa ki se ki pèsistan done? Poukisa nou pran swen sou li? Di, pou egzanp, ki w ap kouri yon pwogram oswa ou te reekri yon pwogram sa a, se yon jwèt, , epi ou vle kenbe tras nan tout nan mouvman itilizatè a se konsa ke petèt si gen yon bagay ale mal, ou ka revize dosye a apre jwèt la. Sa a ki sa nou vle di lè nou pale sou done ki pèsistan. Nan kou a nan kouri ou pwogram, se yon dosye kreye. Lè pwogram ou an te sispann kouri, ke dosye toujou egziste sou sistèm ou. Apre sa, nou ka gade nan li epi li egzaminen l '. Se konsa, ta ke pwogram dwe mete nan te kreye kèk done ki pèsistan, done egziste apre pwogram lan te fini kouri. Koulye a, tout nan fonksyon sa yo ki travay ak kreye dosye ak manipile yo nan divès fason ap viv nan estanda io.h, ki se yon dosye header ki ou te gen anpil chans te liv ki gen ladan nan tèt la nan bèl pi tout pwogram ou paske li te gen youn nan la pi fonksyon itil pou nou, printf, ki tou pèmèt ap viv nan estanda io.h. Se konsa, ou pa bezwen liv gen ladan nenpòt dosye adisyonèl pwobableman yo nan lòd yo travay avèk endikasyon dosye-a. Koulye a, chak fonksyon dosye konsèy sèl, oswa chak yon sèl dosye mwen O, pwodiksyon / D ' fonksyon, aksepte kòm youn nan paramèt li yo oswa entrain yon pointer-- dosye eksepte pou youn, fopen, ki se ki sa ou sèvi ak yo ka resevwa dosye a konsèy an plas an premye. Men, apre ou te louvri nan ranpli epi ou jwenn endikasyon ranpli, ou ka Lè sa a, pase yo kòm agiman nan fonksyon yo divès kalite nou ap ale nan pale sou jodi a, menm jan tou anpil lòt moun pou ke ou ka travay avèk dosye. Se konsa, gen sis bèl yo menm komen debaz ke nou ap ale nan pale sou jodi a. fopen ak konpayon li yo fkloz fonksyon, fgetc ak fputc fonksyon konpayon li yo, ak frèd ak fonksyon konpayon li yo, fwrite. Se konsa an n jwenn dwa nan li. fopen-- sa li fè? Oke, li ouvè yon dosye epi li ba ou yon konsèy dosye nan li, pou ke ou ka Lè sa a, sèvi ak sa ranpli konsèy kòm yon agiman nan nenpòt nan dosye a lòt mwen / O fonksyon. Bagay ki pi enpòtan sonje ak fopen se ke apre ou te louvri nan ranpli oswa te fè yon apèl tankou yonn nan isit la, ou bezwen yo tcheke a asire w ki konsèy la ke ou te tounen se pa egal a nil. Si ou pa gen gade videyo a sou endikasyon, sa a pa ta ka fè sans. Men, si ou eseye epi dèreferans yon rapèl konsèy nil, pwogram ou pwal pwobableman soufri yon segmentation [fèbl]. Nou vle asire w ke nou te resevwa yon tounen konsèy lejitim. A vas majorite de tan an nou pral gen vinn yon konsèy tounen lejitim epi li pa pral yon pwoblèm. Se konsa, kouman nou fè yon rele nan fopen? Li sanble bèl anpil tankou sa a. Zetwal File ptr-- ptr ke yo te yon jenerik non pou dosye pointer-- fopen epi nou pase nan de bagay sa yo, yon non dosye ak yon operasyon nou vle antreprann. Se konsa, nou ta ka gen yon apèl ki sanble ak sa a men ptr zetwal dosye 1 egal fopen file1.txt. Ak operasyon nan mwen te chwazi se r. Se konsa, ki sa ou panse r se isit la? Ki sa ki kalite ki nan bagay sa yo nou ka kapab pou fè pou dosye? Se konsa, r se operasyon an ke nou chwazi lè nou vle li yon dosye-a. Se konsa, nou ta fondamantalman lè nou fè yon apèl tankou sa a dwe resevwa tèt nou yon konsèy dosye sa yo ki te kapab Lè sa a, nou li enfòmasyon soti nan file1.txt. Menm jan an tou, nou te ka louvri dosye 2.txt pou ekri epi pou nou ka pase ptr2, konsèy la dosye mwen te kreye isit la, kòm yon agiman nan nenpòt fonksyon ki ekri enfòmasyon nan yon dosye-a. Apre sa, menm jan ak ekri, gen nan tou opsyon a kole, se yon. Diferans ki genyen ant ekri ak ajou ke yo te ke lè ou ekri nan yon dosye, si ou fè yon rele nan fopen pou ekri e ke dosye deja egziste, li nan ale nan recouvrir dosye a tout antye. Li k ap pase yo kòmanse nan kòmansman an trè, efase tout enfòmasyon ki sa a, se deja la. Lè nou konsidere ke si ou louvri li pou ajou, li pral ale nan fen a nan dosye a si gen nan deja tèks nan li oswa enfòmasyon nan li, epi li pral lè sa a kòmanse ekri soti nan la. Se konsa, ou pa pral pèdi nenpòt nan la enfòmasyon ou te fè anvan. Si ou vle ekri oswa kole sòt de depann sou sitiyasyon an. Men, ou ap pwobableman konnen ki sa a operasyon dwa se lè lè a va rive. Se konsa, sa a, se fopen. Ki sa ki sou fkloz? Oke, trè tou senpleman, fkloz jis aksepte konsèy la dosye-a. Ak jan ou ta ka atann, li fèmen ki dosye-a. Ak yon lòt fwa nou te fèmen yon dosye, nou pa kapab fè nenpòt ki dosye plis mwen / O fonksyon, lekti oswa ekri, sou sa dosye. Nou dwe re-louvri nan ranpli yon lòt tan yo nan lòd yo kontinye ap travay ak li lè l sèvi avèk fonksyon yo mwen / O. Vle di Se konsa, nou ap fè fkloz k ap travay ak sa a dosye-a. Apre sa, tout sa nou bezwen pase nan se non an nan yon konsèy dosye-a. Se konsa, sou yon koup glisad de sa, nou fopened dosye tèks 1 dot pou lekti epi nou asiyen ki ranpli konsèy nan ptr1. Koulye a, nou te deside nou ap fè lekti soti nan ki dosye-a. Nou pa bezwen fè nenpòt ki plis ak li. Nou ka jis fkloz ptr1. Apre sa, Menm jan an tou, te kapab nou fkloz yo menm ki lòt. Tout dwa. Se konsa, ki nan ouvèti ak fèmti. Moun sa yo ki yo se de debaz la kòmanse operasyon yo. Koulye a, nou vle aktyèlman fè kèk bagay ki enteresan, ak fonksyon an premye ki nou pral wè ke pral fè se sa ki fgetc-- ranpli jwenn yon karaktè. Sa a ki sa fgetc jeneralman ta tradui nan. Objektif li yo nan lavi se yo li pèsonaj la kap vini an, oswa si sa a se ou trè premye rele nan fgetc pou yon dosye patikilye, pèsonaj la an premye. Men, Lè sa apre sa, ou jwenn youn nan pwochen, pèsonaj la trè pwochen nan ki ranpli, ak magazen li nan yon varyab karaktè. Kòm nou te fè isit la, Char ch egal fgetc, pase nan non an nan yon konsèy dosye-a. Yon fwa ankò, li trè enpòtan isit la yo sonje ke yo nan lòd yo gen operasyon sa a reyisi, konsèy la dosye tèt li must've te louvri pou lekti. Nou pa ka li yon karaktè ki sòti nan yon dosye konsèy ke nou louvri pou ekri. Se konsa, sa a, se youn nan la limit nan fopen, dwa? Nou dwe mete restriksyon sou nou menm menm ak sèlman fè yon operasyon ak yon sèl dosye konsèy. Si nou te vle pou li e pou ekri nan dosye a menm, nou ta gen louvri de separe endikasyon dosye a menm file-- nan yonn pou lekti, yonn pou ekri. Se konsa, ankò, rezon ki fè la sèlman Mwen pral mennen ki moute kounye a se paske si nou ap ale nan fè yon apèl fgetc, ki must've dosye konsèy te louvri pou lekti. Lè sa a, bèl tou senpleman, tout sa nou bezwen fè se pase nan non an nan konsèy la dosye-a. Se konsa, Char ch egal fgetc ptr1. Sa k ap pase yo ka resevwa nou character-- nan pwochen te oswa ankò, si sa a se premye nan fwa nou te fè apèl sa a, character-- an premye nan tou sa dosye se pwente nan pa ptr1. Sonje byen, sa ki te dosye 1 dot tèks. Li pral jwenn pèsonaj la premye nan ki epi n ap magazen li nan ch la varyab. Joli dwat. Se konsa, nou te sèlman gade twa fonksyon ak deja nou ka fè yon bagay bèl byen òdone. Se konsa, si nou pran kapasite sa a pou trape yon karaktè epi nou riban l-- pou nou kontinye resevwa karaktè ki sòti nan yon dosye sou yo ak sou yo ak kounye a nou over-- ka li chak yon sèl karaktè nan yon dosye. Men, si nou enprime chak karaktè imedyatman apre nou li li, nou te kounye a li ki sòti nan yon dosye ak enprime sa li yo nan ekran an. Nou te efektivman anchene ki dosye sou ekran an. Epi sa a, ki sa a Linux chat lòd fè. Si ou tape nan non chat nan dosye, li pral enprime soti sa ki tout antye nan dosye a nan fennèt tèminal ou yo. Se konsa, sa a ti kras bouk isit la, sèlman twa liy nan kòd, men li efektivman Doublon chat la lòd Linux. Se konsa, sentaks sa a ta ka gade yon ti kras etranj, men isit la nan sa k ap pase isit la. Pandan ke ch egal fgetc, ptr se pa egal a EOF-- li nan yon gren antye, men kite a kraze li desann jis se konsa li a klè sou sentaks la. Mwen te konsolide li pou dedomajman pou la nan espas, byenke li se yon ti kras syntactically difisil. Se konsa, pati sa a nan bon vèt kounye a, ki sa ki li ap fè? Oke, sa se sèlman rele fgetc nou an, dwa? Nou te wè ke anvan. Li nan jwenn yon sèl karaktè soti nan dosye a. Lè sa a, nou konpare ki pèsonaj kont èof. Èof se yon valè espesyal sa a, se defini nan estanda io.h, ki se nan fen pèsonaj dosye-a. Se konsa, fondamantalman sa k pral rive sa a se bouk pral li yon karaktè, li konpare l ak èof a, fen nan karaktè dosye-a. Si yo pa matche ak, se konsa nou pa gen rive jwenn nan fen dosye a, nou pral enprime ke karaktè deyò. Lè sa a, nou pral tounen nan la kòmanse nan riban an ankò. Nou pral jwenn yon karaktè, tcheke kont èof, enprime li soti, ak sou sa ak sou sa ak sou sa, loupin nan nan fason sa a jiskaske nou te rive nan fen a nan dosye a. Lè sa a, pa pwen sa, nou pral gen enprime soti sa ki tout antye de dosye a. Se konsa, ankò, nou te sèlman wè fopen, fkloz, ak fgetc e deja nou ka kopi yon Linux tèminal lòd. Kòm mwen te di nan kòmansman an, nou te gen fgetc ak fputc, ak fputc te konpayon a fonksyon nan fgetc. Se konsa, jan ou ta ka imajine, li se ekivalan a ekri. Li pèmèt nou ekri yon karaktè sèl nan yon dosye-a. Yon fwa ankò, opozisyon an ke yo te, jis tankou li te la avèk fgetc, dosye a ke nou ap ekri nan dwe te louvri pou ekri oswa pou ajou. Si nou eseye epi sèvi ak fputc sou yon dosye ke nou te louvri pou lekti, nou ap ale nan soufri yon ti jan nan yon erè. Men, apèl la se trè senp. kapital fputc Yon ptr2, tout ki nan pral fè se li nan ale nan ekri lèt la nan yon nan dosye 2 dot tèks, ki te non an nan la ranpli ke nou louvri, ak asiyen konsèy la ptr2. Se konsa, nou ap ale nan ekri yon kapital Yon nan pote 2 dot tèks. Epitou, n ap ekri yon esklamasyon lonje dwèt sou depoze 3 dot tèks, ki te pwente nan pa ptr3. Se konsa, ankò, trè dwat isit la. Men koulye a, nou ka fè yon lòt bagay. Nou gen egzanp sa a nou te jis ale sou sou ke yo te kapab replike chat la Linux lòd, yon sèl la ki simagri soti nan ekran an. Oke, kounye a ke nou gen kapasite nan li karaktè soti nan dosye epi ekri karaktè nan dosye, poukisa yo pa nou jis ranplase ki rele nan printf ak yon rele nan fputc. Epi, koulye a nou te double CP, yon trè debaz Linux lòd ke nou te pale osijè de fason lontan Anons sa pibliye depi nan Linux a kòmande videyo. Nou te efektivman double ki dwa isit la. Nou ap li yon karaktè ak Lè sa a nou ap ekri ke karaktè nan yon lòt dosye. Lekti soti nan yon dosye, ekri nan yon lòt, sou yo ak sou yo ak sou ankò jiskaske nou frape èof. Nou te gen nan fen a nan nan ranpli nou ap eseye kopi nan. Ak nan ke nou pral ekri tout te nan karaktè yo ki nou bezwen dosye a ke nou ap ekri a. Se konsa, sa a se CP, Linux kopi lòd la. Nan kòmansman la anpil nan videyo sa a, mwen te gen opozisyon an ke nou ta pale yon ti kras sou pwent. Isit la se espesyalman ki kote nou ap pwal pale osijè endikasyon nan adisyon a ranpli endikasyon. Se konsa, fonksyon sa a sanble kalite pè. Li nan te resevwa plizyè paramèt. Genyen yon anpil ale sou isit la. Genyen yon anpil nan diferan koulè ak tèks. Men, reyèlman, li nan jis nan jenerik vèsyon an fgetc ki pèmèt nou jwenn okenn kantite lajan pou enfòmasyon. Li kapab yon ti jan rezèvwa si nou ap ap resevwa karaktè yon sèl nan yon moman, iteration nan dosye a yon karaktè nan yon tan. Pa li ta dwe joli jwenn 100 nan yon moman oswa 500 nan yon moman? Oke, frèd ak fonksyon li yo konpayon fwrite, nou pral pale sou nan yon dezyèm fwa, pèmèt nou fè sèlman sa. Nou ka li yon kantite lajan abitrè nan enfòmasyon ki sòti nan yon dosye epi nou magazen li yon kote pou yon ti tan. Olye pou yo ke yo te kapab jis anfòm l 'nan yon varyab sèl, nou ta ka bezwen nan magazen li nan yon etalaj. Se konsa, nou pase nan kat agiman fread-- yon konsèy nan kote a kote nou ap ale nan magazen enfòmasyon, ki jan gwo chak inite nan enfòmasyon yo pral, inite ki jan anpil nan enfòmasyon nou vle jwenn, ak soti nan ki dosye nou vle jwenn yo. Pwobableman pi bon ilistre ak yon egzanp isit la. Se konsa nou di ke nou deklare yon etalaj de 10 nonm antye relatif. Nou te jis te deklare sou mòn lan pile abitrèman int ArR 10. Se konsa, sa a, se trè dwat. Koulye a, sa n ap fè si se nan frecall se nou ap li gwosè nan int fwa 10 bytes nan enfòmasyon. Kantite moun ki nan ke yo te int four-- sa a, se gwosè a nan yon nonb antye relatif nan c. Se konsa, sa n ap fè se nou ap li 40 bytes yon valè de enfòmasyon soti nan dosye a pwente nan pa ptr. E nou estoke moun 40 bytes yon kote kote nou te mete sou kote 40 bytes yon valè de memwa. Erezman, nou te deja fè ki pa deklare ArR, ki etalaj la a. Sa se kapab nan kenbe 10 inite kat-multiple. Se konsa, nan total, li ka kenbe 40 bytes yon valè de enfòmasyon. Apre sa, nou yo kounye a se lekti 40 bytes a enfòmasyon ki soti nan dosye a, epi nou ap estoke l 'nan ArR. Sonje byen soti nan videyo a sou pwent ki non an nan yon etalaj, tankou ArR, se reyèlman jis yon konsèy nan eleman premye li yo. Se konsa, lè nou pase nan ArR la, nou se, an reyalite, pase nan yon konsèy. Menm jan an tou nou ka fè sa a men nou pa fè sa nesesèman bezwen pou konsève pou zòn de defans nou an sou pil la. Nou ta ka tou dynamique asiyen yon zòn de defans tankou sa a, lè l sèvi avèk malok. Sonje byen, lè nou dynamique asiyen memwa, nou ap ekonomize l 'sou nan pil wòch, pa chemine a. Men, li la toujou yon zòn de defans. Li toujou, nan ka sa a, se kenbe 640 bytes nan enfòmasyon paske yon doub pran moute uit bytes. Apre sa, nou ap mande pou 80 nan yo. Nou vle gen espas yo kenbe 80 double. Se konsa, 80 fwa 8 se 640 bytes enfòmasyon. Epi sa rele nan frèd se kolekte 640 bytes nan enfòmasyon soti nan dosye a pwente nan pa ptr epi estoke li kounye a nan arr2. Koulye a, nou kapab tou trete frèd jis tankou yon rele nan fgetc. Nan ka sa a, nou ap jis ap eseye jwenn youn karaktè soti nan dosye a. Apre sa, nou pa bezwen yon etalaj yo kenbe yon karaktè. Nou ka jis magazen li nan yon varyab karaktè. Trape an, menm si, se ke lè nou jis gen yon varyab, nou bezwen pase nan la adrès nan varyab sa paske sonje nan ki premye agiman frèd se yon konsèy nan kote a ak memwa kote nou vle nan magazen enfòmasyon an. Yon fwa ankò, non an nan yon etalaj se yon konsèy. Se konsa, nou pa bezwen fè etalaj comercial. Men, c, pèsonaj la c isit la, se pa yon etalaj. Se jis nan yon varyab. Se konsa, nou bezwen pase yon comercial c yo endike ki sa a, se adrès la kote nou vle nan magazen sa a multiple youn nan enfòmasyon, sa a karaktè yon sèl ki nou ap kolekte soti nan ptr. Fwrite-- mwen pral ale nan sa a yon ti kras plis quickly-- se bèl anpil nan ekivalan egzak nan frèd eksepte li a pou ekri olye pou yo lekti, jis tankou other-- nan nou te gen louvri ak fèmen, jwenn yon karaktè, ekri yon karaktè. Kounye a li nan jwenn abitrè kantite lajan pou enfòmasyon, dwat kantite lajan abitrè pou enfòmasyon yo. Se konsa, jis tankou anvan, nou kapab gen yon etalaj de nonm antye relatif 10 kote nou deja genyen enfòmasyon ki estoke, petèt. Li te pwobableman kèk liy nan kòd ki ta dwe ale ant de sa yo kote mwen ranpli vizitè ki s ak yon bagay ki gen sans. Mwen ranpli li ak 10 nonm antye relatif diferan. Ak olye pou, ki sa mwen se fè ap ekri soti nan ArR ak ranmase enfòmasyon ki soti nan ArR. Apre sa, mwen ap pran enfòmasyon ki epi mete l 'nan dosye a. Se konsa, olye pou yo ke yo te soti nan li dosye a nan zòn de defans la, nou ap kounye a pral soti nan tanpon nan dosye a. Se konsa, li nan jis ranvèse a. Se konsa, ankò, jis tankou anvan, nou kapab yo te genyen tou yon moso nan memwa pil wòch ke nou te dynamique resevwa lajan pou li epi li soti nan ki epi ekri ki nan dosye a. Apre sa, nou yo te genyen tou yon varyab sèl ki kapab kenbe yon sèl multiple nan enfòmasyon, tankou yon karaktè. Men, ankò, nou bezwen pase nan adrès ki nan varyab sa lè nou vle li soti nan li. Se konsa, nou ka ekri enfòmasyon ki nou jwenn nan adrès ki konsèy la dosye, ptr. Genyen anpil lòt gwo dosye mwen / O fonksyon ki fè divès kalite bagay sa yo san konte yo menm ki nou te te pale osijè de jodi a. Yon koup nan yo menm ki ou ta ka jwenn itil se fje ak fputs, ki se ekivalan a a fgetc ak fputc men pou lekti yon afè yon sèl ki sòti nan yon dosye-a. Olye pou yo yon karaktè sèl, li pral li yon fisèl tout antye. fprintf, ki fondamantalman pèmèt ou sèvi ak printf yo ekri nan pote. Se konsa, jis tankou ou ka fè nan varyab sibstitisyon lè l sèvi avèk m nan placeholders pousan ak pousan d, ak sou sa, ak printf ou ka Menm jan an tou pran an fisèl printf ekri an lèt detache yon bagay ak tankou sa a yon dosye-a. fseek-- si ou gen yon jwè DVD se analoji a Mwen konn sèvi ak isit lan-- se sòt de tankou lè l sèvi avèk ou remonte ak vit pou pi devan bouton fè mouvman fim nan. Menm jan an tou, ou ka deplase nan dosye a. Youn nan bagay ki anndan ke estrikti dosye ki c kreye pou ou se yon endikatè nan kote ou se nan dosye a. Èske w se nan trè an kòmanse, nan multiple zewo? Èske w se nan multiple 100, multiple 1,000, ak sou sa? Ou kapab sèvi ak fik abitrèman deplase ki endikatè pou pi devan oswa dèyè. Apre sa, ftell, ankò menm jan ak yon jwè DVD, se tankou yon ti revèy ki di w kouman anpil minit ak segonn ou se nan yon fim patikilye. Menm jan tou, ftell di ou ki jan anpil bytes ou se nan dosye a. feof se yon vèsyon diferan a detekte si wi ou non ou te te rive nan fen a nan dosye a. Apre sa, ferror se yon fonksyon ke ou ka itilize si wi ou non yo detekte yon bagay gen ale mal k ap travay ak yon dosye-a. Yon fwa ankò, sa a se jis grate sifas la. Genyen toujou anpil plis dosye mwen / O fonksyon nan nan estanda io.h. Men, sa a pwal pwobableman fè ou jwenn te kòmanse travay ak endikasyon dosye-a. Mwen se Doug Lloyd. Sa a se CS50.