>> SPEAKER: Toistaiseksi se on todennäköisesti että useimmat ohjelmat
on ollut hieman lyhytaikaisia.
Voit suorittaa ohjelman kuten Mario tai ahne.
Se tekee jotain, se ehkä kysyy käyttäjän joitakin tietoja,
tulostaa joitakin tulosteita, mutta sitten kun ohjelma on ohi,
siellä oikeastaan ​​mitään todisteita siellä se oli koskaan ajaa ensiksi.
Tarkoitan, varmasti, olet ehkä jäljellä se avautuu pääteikkunaa
mutta jos tyhjentää näytön, siellä oikeastaan ​​mitään todisteita siitä, että se oli olemassa.
Meillä ei ole tallentavat pysyviä tietoja, tiedot
että olemassa jälkeen meidän Ohjelma on pysähtynyt,
tai emme ole tähän asti.
Onneksi kuitenkin, C ei meille mahdollisuuden
tehdä tämän toteuttamalla jotain kutsutaan
tiedosto, rakenne, joka periaatteessa edustaa tiedosto kaksinkertaistuisi
klikkaa tietokoneeseen, jos olet käyttää graafinen ympäristö.
Yleensä kun työ C, olemme todella
tulevat työskentelemään kanssa viitteitä files-- tiedosto stars--
lukuun ottamatta hieman kun puhumme pari
toimintoja, jotka työskennellä tiedosto viitteitä.
Sinun ei tarvitse olla todella kaivettiin liian syvälle ymmärrys osoittimet
itse.
Siellä on pieni pikkuinen vähän jossa puhumme niistä,
mutta yleensä tiedosto osoittimet ja osoittimet, kun taas toisiinsa,
eivät ole täsmälleen sama asia.
>> Nyt mitä tarkoitan kun Sanon pysyviä tietoja?
Mikä on pysyviä tietoja?
Miksi me välitä siitä?
Sano esimerkiksi, että käytät ohjelma
tai olet uusiksi ohjelma, joka on peli,
ja haluat seurata kaikki käyttäjän liikkuu
joten ehkä jos jokin menee pieleen, voit tarkistaa tiedoston pelin jälkeen.
Sitähän me tarkoitamme, kun me puhua pysyviä tietoja.
>> Aikana käynnissä ohjelma, tiedosto luodaan.
Ja kun ohjelma on pysähtynyt,
että tiedosto on edelleen olemassa järjestelmässä.
Ja voimme katsoa sitä ja tutkia sitä.
Ja jotta ohjelma olisi asetettu ovat luoneet pysyviä tietoja,
tiedot ovat olemassa, kun ohjelma on päättynyt.
>> Nyt kaikki nämä toiminnot, jotka toimivat luomisessa tiedostoja ja manipuloida
niitä eri tavoin elävät vakio io.h,
joka on header tiedosto, joka olet todennäköisesti ollut punnan
myös yläosassa melko paljon kaikki ohjelmat
koska se sisältää yhden eniten hyödyllisiä toimintoja meille,
printf, että myös avulla asuu vakio io.h.
Joten sinun ei tarvitse punta sisällyttää muita tiedostoja luultavasti
voidakseen työskennellä tiedostojen viitteitä.
>> Nyt jokainen tiedosto osoitin toiminto, tai joka ikinen tiedosto I / O, Input Output
toiminto, hyväksyy yhtenä sen parametrit tai tuotantopanosten
Tiedoston pointer-- paitsi yksi, fopen, joka
on mitä käytät saada tiedosto osoitin ensiksi.
Mutta kun olet avannut tiedosto ja saat tiedosto viitteitä,
voit sitten siirtää niitä argumentteja eri toimintojen
aiomme puhua tänään, samoin kuin monet muut
jotta voit työskennellä tiedostoja.
>> Joten on kuusi melko Yhteisten niistä
että me aiomme puhua tänään.
fopen ja sen seuralainen toiminto fclose, fgetc
ja sen seuralainen toiminto fputc, ja fread ja sen seuralainen toiminto,
fwrite.
Joten saada oikeutta siihen.
>> fopen-- mitä se tekee?
No, se avaa tiedoston ja se antaa sinulle tiedoston osoitin sen,
jotta voit käyttää tätä tiedoston osoitin argumenttina
Minkä tahansa muiden tiedostojen I / O-toimintoja.
Kaikkein tärkein asia muistaa kanssa fopen
on, että kun olet avannut tiedostoon tai teki puhelun kuin yksi täällä,
sinun täytyy varmista että osoitin että sait takaisin
ei ole yhtä suuri null.
Jos et ole katsellut video osoittimet, tämä ei välttämättä ole järkeä.
Mutta jos yrität ja dereference nollaosoittimen muistaa,
ohjelma todennäköisesti kärsimään segmentointi [kuultavissa].
Haluamme varmistaa, että meillä sai laillinen osoitin takaisin.
Valtaosa ajasta me ovat saaneet oikeutettu osoitin takaisin
ja se ei ole ongelma.
>> Miten siis soittaa fopen?
Se näyttää melko paljon kuin tämä.
Tiedoston tähden ptr-- ptr on geneerinen nimetä tiedostojen pointer-- fopen
ja ohitamme kaksi asiaa, tiedoston nimi ja toiminta haluamme toteuttaa.
Joten saatamme olla puhelu, joka näyttää this-- tiedosto tähti PTR 1 vastaa fopen
file1.txt.
Ja toimenpide olen valinnut on r.
>> Mitä luulet r on täällä?
Mitkä ovat erilaisia ​​asioita ehkä tehdä tiedostoja?
Joten r on toimintaa, että me valita, milloin haluamme lukea tiedostoa.
Joten olisimme periaatteessa kun me soittaa näin
saamaan itsemme tiedoston osoitin niin että voisimme sitten lukea tietoja
alkaen file1.txt.
>> Samoin, voisimme avata tiedoston 2.txt kirjoitus- ja jotta voimme välittää ptr2,
tiedosto osoitin Olen luonut täällä, argumenttina jokin toiminto
kirjoittaa tiedot tiedostoon.
Ja samanlainen kirjallisesti, siellä myös mahdollisuus liittää,.
Ero kirjallisesti ja liittämällä
on, että kun kirjoitat tiedostoon, jos soittaa fopen kirjoittamiseen
ja että tiedosto on jo olemassa, se on menossa korvata koko tiedoston.
Se tulee aloittaa aivan alussa,
poistaa kaikki tiedot joka on jo olemassa.
>> Ottaa huomioon, että jos avaat sen liittämällä, se menee loppuun tiedoston
jos on jo tekstiä se tai sen sisältämä tieto,
ja se sitten alkaa kirjallisesti sieltä.
Joten et menetä mitään tietoja, jotka olet tehnyt ennen.
Haluatko kirjoittaa tai liittää tavallaan riippuu tilanteesta.
Mutta luultavasti tietää mitä oikea toiminta on, kun sen aika tulee.
Niin, että fopen.
>> Entä fclose?
No, ihan yksinkertaisesti, fclose vain hyväksyy tiedoston osoitin.
Ja kuten arvata saattaa, se sulkee tiedoston.
Ja kun olemme suljettu tiedoston, emme voi suorittaa enää tiedoston I / O-toimintojen,
tai lukee, kyseisestä tiedostosta.
Meidän täytyy avata uudelleen tiedoston toisen kerran, jotta
jatkamaan työtä sitä käyttämällä I / O-toimintoja.
Joten fclose avulla olemme tehneet työskennellä tämän tiedoston.
Ja kaikki meidän täytyy kulkea on tiedoston nimi osoittimen.
Joten pari liukuu sitten, me fopened tiedosto 1 piste tekstin lukemiseen
ja me määritetty että tiedosto osoitin ptr1.
Nyt olemme päättäneet olemme tehty lukemisen tiedoston.
Emme tarvitse tehdä enää sen kanssa.
Voimme vain fclose ptr1.
Ja vastaavasti voisi me FSulje toisilla.
Selvä.
Jotta avaus ja sulkeminen.
Ne ovat kaksi perus toiminnan aloittamista.
>> Nyt haluamme todella tehdä joitakin mielenkiintoisia juttuja,
ja ensimmäinen toiminto että me will nähdä, että tekee se on fgetc--
tiedosto saada merkin.
Sitähän fgetc yleensä olisi kääntää.
Sen tavoitteena elämässä on Lue seuraava merkki,
tai jos tämä on hyvin Ensimmäinen puhelu fgetc
tietyn tiedoston, ensimmäinen merkki.
Mutta sitten sen jälkeen, saat seuraava,
hyvin seuraavan merkin kyseisen tiedoston, ja tallentaa sen merkin muuttujaan.
Kuten olemme tehneet täällä, char ch vastaa fgetc,
pass nimissä tiedoston osoitin.
Taaskin se on hyvin tärkeää täällä muistaa
että jotta on tämä operaatio onnistuu,
tiedosto osoitin itse varmaan avattu lukemista varten.
Emme voi lukea merkin tiedostosta osoitin, että avasimme kirjoittamista varten.
Joten se on yksi rajoitukset fopen, eikö?
Meidän on rajoittaa itseämme vain suorittamista
yksi kanssa yhden tiedoston osoitin.
Jos halusimme lukea ja kirjoittaa samasta tiedostosta,
meillä olisi auki kaksi erillistä tiedosto viitteitä samaan file--
yksi lukemiseen, yksi kirjoittamista varten.
>> Joten jälleen, ainoa syy Tuon että nyt on
koska jos aiomme soittaa sen fgetc, että tiedosto osoitin täytynyt
avattu lukemista varten.
Ja sitten melko yksinkertaisesti, kaikki meidän täytyy tehdä
on kulkea tiedoston nimi osoittimen.
Joten char ch vastaa fgetc ptr1.
>> Että menee saada meidät seuraava character--
tai uudelleen, jos tämä on ensimmäinen kerta, kun olemme tehneet tämän puhelun,
ensimmäinen character-- riippumatta tiedosto on osoitteen sivulle ptr1.
Muista, että se oli tiedosto 1 piste tekstiä.
Se saat ensimmäisen merkin, joka ja me tallentaa sen muuttujaan ch.
Melko yksinkertainen.
Joten olemme vain katseli kolme toiminnot ja jo me
voi tehdä jotain ihan siisti.
>> Joten jos otamme tämän mahdollisuuden saada merkki
ja me silmukka it-- niin me edelleen saada merkkiä
tiedostosta yli ja yli ja over-- nyt
voi lukea jokaisen luonnetta tiedoston.
Ja jos me tulostaa jokaisen merkin heti kun lukea sitä,
olemme nyt luetaan tiedostosta ja painettu sen sisällön näytön.
Olemme tehokkaasti ketjutettujen että tiedosto ruudulla.
Ja sitähän Linux komento kissa tekee.
>> Jos kirjoitat kissa tiedoston nimi, se tulostaa koko sisältö
tiedoston oman pääteikkunassa.
Ja niin tämä pieni silmukka täällä, vain kolme riviä koodia,
mutta sitä tehokkaasti päällekkäinen Linux komento kissa.
Joten tämä syntaksi pitää näyttää hieman outo,
mutta tässä mitä täällä tapahtuu.
Vaikka ch vastaa fgetc, PTR ei ole sama EOF-- se on koko suupala,
mutta katsotaan murtaa se alas vain joten se selväksi syntaksin.
Olen konsolidoitu sen vuoksi tilaa,
vaikka se on vähän syntaktisesti hankala.
>> Joten tämä osa vihreä oikeassa nyt, mitä se tekee?
No, se on vain meidän fgetc soittaa, eikö?
Olemme nähneet, että ennen.
Se saadakseen yhtä hahmo tiedosto.
Sitten vertaamme että merkki vastaan ​​EOF.
EOF on erityinen arvo, joka on määritelty standardissa io.h, joka
on tiedoston loppuun luonnetta.
Joten periaatteessa mitä tulee tapahtumaan on tämä silmukka lukee hahmo,
vertaa sitä EOF, tiedoston loppuun luonnetta.
Jos ne eivät täsmää, joten meillä ei lopussa tiedoston,
me tulostaa että hahmosi ulos.
Sitten menemme takaisin alussa silmukan uudelleen.
Saamme merkin, tarkista vastaan ​​EOF, tulostaa sen, ja niin edelleen
ja niin edelleen ja niin edelleen, looping kautta tällä tavalla
kunnes olemme saavuttaneet tiedoston loppuun.
Ja sitten siihen mennessä, olemme painettu
ulos koko tiedoston sisältö.
Joten jälleen olemme vain nähneet fopen, fclose, ja fgetc
ja jo voimme monistaa Linux terminaaliin komento.
>> Kuten sanoin alussa, meillä oli fgetc ja fputc,
ja fputc oli seuralainen funktio fgetc.
Ja niin, kuin voisi kuvitella, se on kirjallisesti vastaava.
Se antaa meille mahdollisuuden kirjoittaa yhden merkin tiedostoon.
>> Jälleen varoitus on, vain kuin se oli kanssa fgetc, tiedosto
että me kirjallisesti täytynyt olla avataan kirjoittamista tai liittämällä.
Jos yritämme käyttää fputc tiedostoa että olemme avataan lukemista,
aiomme kärsiä hieman virhe.
Mutta puhelu on melko yksinkertainen.
fputc pääoman ptr2, kaikki joka tulee tehdä, on se
menossa kirjoittaa kirjettä osaksi tiedostoon 2 dot
teksti, joka oli nimi aineistosta ilmenee, että avasimme ja osoitetaan
osoitin ptr2.
Joten aiomme kirjoittaa pääoma tiedostoon 2 pisteen tekstiä.
Ja me kirjoittaa huudahdus kohta tiedostoon 3 piste
teksti, joka on osoitteen sivulle ptr3.
Joten jälleen, melko suoraviivaista täällä.
>> Mutta nyt voimme tehdä toinen asia.
Meillä on tässä esimerkissä olimme juuri menossa yli
olemisesta pysty jäljittelemään kissa Linux komento, joka tulostaa
näyttöön.
No, nyt, että meillä on mahdollisuus lukemaan merkkejä tiedostoista
ja kirjoittaa merkkiä tiedostoja, miksi emme vain korvata, että
soittaa printf kanssa puhelun fputc.
>> Ja nyt olemme monistaa cp, hyvin yksinkertainen linux komento
että puhuimme miten pitkän sitten Linux komennot video.
Olemme tehokkaasti kahdennettu että täällä.
Me luet merkki ja sitten olemme kirjallisesti, että merkin toiseen tiedostoon.
Lukeminen tiedostosta, kirjoittaminen toiseen, yli ja yli
ja uudestaan, kunnes me osuma EOF.
Meillä loppuun tiedosto yritämme kopioida.
Ja että me kirjoittanut kaikki merkkien meidän tiedosto
että me kirjallisesti.
Joten tämä on cp, Linux kopiointikomentoa.
>> Vuoden alusta Tämän videon, minulla oli varoitus
että juttelimme vähän tietoa viitteitä.
Tässä on nimenomaan missä olemme aio puhua viitteitä
lisäksi tiedostoon viitteitä.
Joten tämä toiminto näyttää pelottavalta.
Se sai useita parametreja.
Siellä on paljon täällä.
Siellä on paljon erilaisia värejä ja tekstejä.
Mutta oikeasti, se on vain geneeristä fgetc
jonka avulla voimme saada mitään määrä tietoa.
Se voi olla hieman tehotonta, jos olemme saada merkit yksi kerrallaan,
iteroimalla läpi tiedosto yksi merkki kerrallaan.
Eikö olisi mukavampaa saada 100 kerrallaan tai 500 kerrallaan?
>> No, fread ja sen seuralainen toiminto fwrite, joka me puhumme
toisessa, jotta voisimme tehdä juuri niin.
Voimme lukea mielivaltaisen määrän Tietojen tiedostosta
ja me tallentaa sen jonnekin tilapäisesti.
Sen sijaan, että voimme vain asenna se yhden muuttujan,
saatamme tarvita tallenna se jono.
Ja niin, välitämme neljässä argumentteja fread-- osoitin
paikkaan, johon olemme menossa tallentaa tietoa,
kuinka suuri kukin tiedon yksikkö on, kuinka monta yksikköä tietoa
haluamme hankkia, ja joka tiedosto haluamme saada ne.
Kuvaa ehkä parhaiten esimerkin tästä.
Joten sanotaan, että julistamme joukko 10 kokonaislukuja.
Olemme juuri ilmoitettu pino mielivaltaisesti int sov 10.
Niin se on melko yksinkertainen.
Nyt mitä teemme kuitenkin on frecall on me luet koko int
kertaa 10 tavua informaatiota.
Koko int olennon four-- se koko kokonaisluku C.
>> Joten mitä teemme on meidän luet 40 tavua arvoinen tiedot
tiedostosta osoitteen sivulle PTR.
Ja me tallentamiseen ne 40 tavua jonnekin
jossa olemme varautuneet 40 tavua arvoinen muistia.
Onneksi olemme jo tehneet, että julistamisesta sov, että array oikeassa.
Joka pystyy tilan 10 neljän tavun yksikköä.
Joten yhteensä, se mahtuu 40 tavua arvoinen tietoja.
Ja nyt käsittelyssä 40 tavua Tietojen tiedostosta,
ja olemme tallentamalla sen sov.
>> Muistamme video viitteitä, että nimi array, kuten sov,
on oikeastaan ​​vain osoitin sen ensimmäinen elementti.
Joten kun me kulkea sov siellä, me ovat itse asiassa ohimennen osoitin.
>> Samoin voimme tehdä this-- emme välttämättä
täytyy pelastaa puskuri pinoon.
Voisimme myös dynaamisesti varata puskuri näin, käyttäen malloc.
Muista, kun dynaamisesti varata muistia,
säästämme sen kasaan, ei pino.
Mutta se on silti puskuri.
>> Se vielä, tässä tapauksessa on tilalla 640 tavua tietoja
koska kaksinkertainen vie kahdeksan tavua.
Ja pyydämme 80 niistä.
Haluamme olla tilaa pitää 80 nelinpelin.
Joten 80 kertaa 8 on 640 tavua tietoa.
Ja että kutsu fread on keräämällä 640 tavua tietoa
tiedostosta osoitteen sivulle ptr ja varastoimalla se nyt arr2.
>> Nyt voimme myös hoitaa fread aivan kuten puhelun fgetc.
Tässä tapauksessa, me vain yrittää saat yhden merkin tiedostosta.
Ja meidän ei tarvitse array pitää merkin.
Voimme vain tallentaa sen merkki muuttuja.
>> Saalis on kuitenkin se, että kun meillä vain on muuttuva,
meidän täytyy kulkea osoite muuttujan
koska muistaa, että ensimmäinen argumentti fread
on kohdistin ja muisti jossa haluamme tallentaa tiedot.
Jälleen nimi array on osoitin.
Joten meidän ei tarvitse tehdä ampersand array.
Mutta C-merkki C täällä, ei ole array.
Se on vain muuttuja.
Ja niin meidän täytyy kulkea Ampersand C osoittamaan
että se on osoite, johon haluamme tallentaa tämän yhden tavun tietoja,
tämä yksi merkki, joka olemme kerätä päässä PTR.
Fwrite-- Käyn läpi tämä hieman enemmän
quickly-- on melko paljon tarkka vastaa fread
paitsi se on kirjoitus- lukemisen sijaan, vain
kuten other-- meillä on ollut auki ja lähellä, saada merkin,
kirjoittaa merkin.
Nyt on saada mielivaltainen määrä tietoa,
oikea mielivaltainen määrä tietoa.
Joten aivan kuten ennen, voimme on joukko 10 kokonaislukuja
jossa meillä on jo tallennetut tiedot, ehkä.
>> Se oli todennäköisesti joitakin riviä koodia että pitäisi mennä näiden kahden
jossa olen täyttää sov kanssa jotain merkityksellistä.
Olen täytä se 10 eri kokonaislukuja.
Ja sen sijaan, mitä olen tekemässä kirjallisesti sov
ja keräämällä tietoja sov.
Ja otan että tiedot ja laittoi pallon tyhjään tiedostoon.
>> Joten sen sijaan, että on peräisin tiedosto puskuriin,
olemme nyt menee puskuri tiedostoon.
Joten se on juuri päinvastaiset.
Joten jälleen, kuten ennen, voimme myös kasaan kimpale muisti
että olemme dynaamisesti jaetaan ja lukea, että
ja kirjoittaa, että tiedosto.
>> Ja meillä on myös yhden muuttujan pystyttävä pitämään yhden tavun
koskevien tietojen, kuten merkin.
Mutta jälleen kerran, meidän täytyy kulkea osoitteen muuttujan
kun haluamme lukea siitä.
Joten voimme kirjoittaa tiedot löydämme tähän osoitteeseen
tiedoston osoitin PTR.
>> On paljon muita Tiedoston I / O-toiminnot
jotka tekevät eri asioita lisäksi niistä olemme puhuneet tänään.
Pari niistä saatat löytää hyödyllistä
ovat fgets ja fputs, jotka ovat yhtä
sekä fgetc ja fputc mutta lukemiseen yksittäinen merkkijono tiedostosta.
Sen sijaan yhden merkin, se lukee koko merkkijono.
fprintf, joka pohjimmiltaan avulla voit käyttää printf kirjoittaa tiedostoon.
Joten aivan kuten voit tehdä muuttuja korvaaminen käyttäen
paikkamerkit prosenttia i ja prosenttia d, ja niin edelleen, printf
voit samalla ottaa printf merkkijono ja tulostaa jotain
kuin että tiedostoon.
>> fseek-- jos sinulla on DVD-soitin on analogisesti Käytän yleensä here--
on tavallaan kuin käytät pikakelaavat
painikkeita liikkua elokuva.
Samoin voit liikkua tiedosto.
Yksi asioita sisällä että tiedosto rakenne
että C luo sinulle on indikaattori missä olet tiedoston.
Oletko aivan alkaa, tavun nolla?
Oletteko tavu 100, tavu 1000, ja niin edelleen?
Voit käyttää fseek mielivaltaisesti siirtää että indikaattori eteen- tai taaksepäin.
>> Ja ftell, jälleen samanlainen DVD-soitin,
on kuin pieni kello, joka kertoo kuinka monta minuuttia ja sekuntia sinua
ovat osaksi tietyn elokuvan.
Samoin ftell kertoo, kuinka monta tavua olet osaksi tiedoston.
feof on erilainen versio havaita onko olet
lopussa tiedoston.
Ja ferror on funktio että voit käyttää
havaita onko jotain on mennyt pieleen Työskentely tiedosto.
Tämäkin on vain esimakua.
On vielä paljon enemmän tiedosto I / O- toiminnot standardin io.h.
Mutta tämä luultavasti sinut aloitti työt tiedosto viitteitä.
Olen Doug Lloyd.
Tämä on CS50.