TITO. C-ohjelmointi, syksy 2008: Funktiot. ltö. Aliohjelmaesimerkki. Esimerkki: potenssiin korotus. Luento 4, pe

Samankaltaiset tiedostot
C-ohjelmointi: Funktiot. Luento: viikko 2

C-ohjelmointi, syksy 2008: Funktiot

C-ohjelmointi, kevät t 2006: Funktiot. Luento 4, ti Tiina Niklander

TITO. Sisältö. C-ohjelmointi, kevät 2006: Funktiot. Aliohjelmaesimerkki. Yleistä. Parametrit. Esimerkki: potenssiin korotus

C-ohjelmointi, kevät 2006: Funktiot

TITO. ltö. C-ohjelmointi, syksy 2006: Funktiot. Aliohjelmaesimerkki. Esimerkki: potenssiin korotus. Luento 4, ti

C-ohjelmointi, syksy 2006: Funktiot

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

C-ohjelmointi: Osoittimet

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Jakso 4 Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Rakenne. C-ohjelmointi: Tietorakenteita ja tyyppejä. Tyyppimuunnoksia aritmeettisten tyyppien välillä. Tyyppimuunnokset. & (bitti and) Bittioperaatiot

Monipuolinen esimerkki

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Lyhyt kertaus osoittimista

Tietueet. Tietueiden määrittely

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

TIETORAKENTEET JA ALGORITMIT

Osoitin ja viittaus C++:ssa

1. Omat operaatiot 1.1

Loppukurssin järjestelyt C:n edistyneet piirteet

Loppukurssin järjestelyt

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Moduli 5: Kehittyneitä piirteitä

C-kurssi kevät t Luento 2: tyypit, rakenteet, makrot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Rakenteiset tietotyypit Moniulotteiset taulukot

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

Tietorakenteet ja algoritmit

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Harjoitustyö: virtuaalikone

Aliohjelmien toteutus Suoritin ja väylä

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

Luennon sisältö. C-kurssi kevät Tasokokeen kohta 1: Taulukon järjestäminen. Tasokokeen kohta 2. Tasokokeen kohta 2. Tasokokeen kohta 3

C-kurssi kevät Luennon sisältö

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

7. Oliot ja viitteet 7.1

19. Olio-ohjelmointia Javalla 19.1

Luennon sisältö. Taulukot (arrays) (Müldnerin kirjan luku 10) Yksiulotteiset taulukot. Mikä taulukko on? Taulukko-osoitin. tavallinen osoitin

ITKP102 Ohjelmointi 1 (6 op)

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

C++11 lambdat: [](){} Matti Rintala

Osoittimet ja taulukot

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

ITKP102 Ohjelmointi 1 (6 op)

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

ITKP102 Ohjelmointi 1 (6 op)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

C-ohjelmointi, syksy 2006

C-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

ITKP102 Ohjelmointi 1 (6 op)

Tiedon sijainti suoritusaikana. Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Muuttujien roolit Kiintoarvo cin >> r;

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

A TIETORAKENTEET JA ALGORITMIT

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

4. Luokan testaus ja käyttö olion kautta 4.1

Algoritmit 1. Luento 3 Ti Timo Männikkö

Tietorakenteet ja algoritmit

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

18. Abstraktit tietotyypit 18.1

Ohjelmoinnin peruskurssien laaja oppimäärä

12. Näppäimistöltä lukeminen 12.1

Rajapinta (interface)

Tietorakenteet ja algoritmit

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Osoittimet ja taulukot

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

Olio-ohjelmointi Javalla

Taulukot. Jukka Harju, Jukka Juslin

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (4)

Transkriptio:

Sisält ltö C-ohjelmointi, syksy 2008: Funktiot Luento 4, pe 2.9.2008 Yleistä Parametrit Paluuarvo ja sen käyttk yttö Ohjelmointityylistä: : modulaarisuus Funktion esittelyt otsikkotiedostoon Monen ohjelmatiedoston käyttk yttö Näkyvyyssäännöt Osoitintyyppi Viiteparametrit Funktioparametrit 2 Yleistä Funktiot ovat kaikki irrallisia ja samalla tasolla (ei sisäkk kkäisiä funktioita) Ohjelmassa on aina tasan yksi main-funktio Suoritus alkaa tästt stä funktiosta Näkyvyyttä voi rajoittaa vain tiedostoittain ja kirjoitusjärjestyksell rjestyksellä Funktioilla on vain arvoparametreja Viiteparametrit on toteutettava osoitintyypin avulla Funktio voi saada parametrinaan myös s toisen funktion osoitteen Funktioiden syntaksi kuten Javan metodit 3 TITO Kaikki viitteet näihin tehdään suhteessa FP:hen Aliohjelmaesimerkki int fa (int x, y) int z = 5; z = x * z + y; return (z); T = fa (200, R); FP SP paluuarvo paramx paramy vanha PC vanha FP paik. z vanha R aliohjelman toteutus: retfa EQU -4 parx pary EQU -3 EQU -2 locz EQU fa ks. fa.k9 PUSH SP, =0 ; alloc Z PUSH SP, R ; save R LOAD R,=5; init Z STORE R, locz (FP) prolog LOAD R, parx (FP) MUL R, locz (FP) ADD R, pary (FP) STORE R, locz (FP) STORE R, retfa (FP) POP SP, R; recover R SUB SP, = ; free Z EXIT SP, =2 ; 2 param. epilog 4 Esimerkki: potenssiin korotus Parametrit #include <stdio.h> int power (int m, int n); int main( ) for (i=0; i < 20; ++i) printf (%d %d %d \n, i, power(2,i), power(-3,i)); int power (int base, int n) int i, p=; for (i=; i<=n; ++i) p = p*base; return p; Funktion esittely Tai: int power (int, int); Oltava ennen käyttk yttöä Funktion kutsu Parametreille arvot Funktion määm äärittely muuttujan osoite. Voi olla esittelyn Erityisellä tyypillä void voi kertoa, jos funktiolla yhteydessä tai erikseen ei ole parametreja HUOM: ei puolipistettä 5 6 otsikossa Aina arvoparametreja (kuten Javan metodeilla) Arvo kopioidaan pinoon Käytetään n funktion sisäll llä parametrin nimellä Funktion sisäll llä parametrit käyttk yttäytyvät t kuin paikalliset muuttujat Tarvittaessa viiteparametreja on välitettv litettävä

void ja tyyppimuunnokset Esittely (declaration): int f() on sama kuin int f(void) Kutsu (call): f(); on sama kuin kuin (void)f(); Parametrien arvot muunnetaan kutsussa tarvittaessa (kunhan tyypit tiedossa!). Vastaava muunnos tehdää ään paluuarvolle. int f(int); double x = f(.2); 7 Paluuarvo ja sen käyttk yttö Funktion paluuarvo on aina määm ääriteltävä Yksinkertainen tyyppi (ei voi olla rakenne kuten Javassa) Voi olla myös void (eli ei paluuarvoa) Kutsuja pääp äättää mitä paluuarvolla tekee Kutsu lausekkeessa -> > arvo suoraan käyttk yttöön, sijoitetaan muuttujan arvoksi tai jopa jätetj tetään n hyödynt dyntämättä (valitettavasti sallittua!) 8 exit -funktio Ohjelman suorituksen voi missä tahansa ja koska tahansa lopettaa kutsumalla exit- funktiota. exit(int code); double f(double x) if(x < 0) fprintf(stderr,, "negative x in %s\n",% FILE ); exit(exit_failure); /* no return */ return sqrt(x); Paluuarvot Paluuarvot: : EXIT_SUCCESS tai EXIT_FAILURE 9 Funktion dokumentointi Esittelyn tai määrittelyn (tai molempien) ) on syytä kuvata funktion käyttäytyminen: Function: nimi Purpose: Yleiskuvaus toiminnasta (tyypillisesti kuvaa, miten funktion oletetaan toimivan) Inputs: Luettelo parametreista ja käytetyistä globaaleista muutt. Returns: Paluuarvo Modifies: Luettelo parametreista ja globaaleista muuttujista joiden arvo muuttuu toiminnan seurauksena (myös: sivuvaikutukset!!) Error checking: Funktion tekemät parametrien virhetarkistukset Sample call: kutsuesimerkki 0 Esimerkki /* Funktio: : maxi * Tehtävä: Etsii suuremman parametriarvon * Parametrit: kaksi kokonaislukua * Palauttaa: suuremman arvon * Muuttaa: ei mitää ään * Virhetark.: ei ole * Kutsuesimerkki: : i = maxi(k, 3) */ int maxi(int i, int j) return i > j? i : j; Esimerkki: sarjan summa /* Function: oneovernseries * Purpose: compute the sum of /N series * Inputs: n (parameter) * Returns: the sum of first n elements of * + /2 + /3 + /n * Modifies: nothing * Error checking: returns 0 if n negative * Sample call: i = oneovernseries(00); */ double oneovernseries(int); 2 2

double oneovernseries(int n) double x; /* Check boundary conditions */ if(n <= 0) for(x = 0, i = ; i < n; i++) x += /((double)i); return x; Moduulit ja modulaarinen ohjelmointi C C ei suoraan tue modulaarista (tai rakenteista) ohjelmointitapaa ei sisäkk kkäisiä funktioita globaalit muuttujat näkyvn kyvät t saman tiedoston niille funktioille, joiden esittely tai määrittely on vasta muuttujan määm äärittelyn jälkeen 3 4 Moduulit C:ssä on ohjelmoijan kuitenkin mahdollista käsitellä tiedostoja siten, että yhteen kuuluvat elementit sijoitetaan samaan tiedostoon yhden abstraktin tietotyypin toteutus yhteen tiedostoon Moduulia voi jopa ajatella luokan kaltaisena elementtinä Esim. tiedostot lista.h ja lista.c lista.h tietorakenteiden kuvaus ja funktioiden esittelyt lista.c funktioiden toteutukset ja omien muuttujien 5 esittelyt Moduulit: esittely vs. toteutus Moduulilla on aina esittely otsikkotiedostossa (*.h) ja toteutus erillisessä ohjelmatiedostossa (*.c) käyttäjä (eri moduuli, Joku funkt.) main.c esittely (otsikkotiedosto) list.h toteutus list.c 6 Esimerkki: LINUXin prosessilista prev next prev next prev next Linuxissa on abstrakti tietorakenne kahteen suuntaan linkitetty lista (käytet ytetään n mm. prosessin kuvaajille) Listalle on määm ääritelty omat käsittelyrutiinit k (funktioita ja makroja) list_add(n,h), list_add_tail(n,h) list_del(p) list_empty(p), list_entry(p,t,f) list_for_each(p,h) Prosessilistan omat makrot: : SET_LINKS REMOVE_LINKS (kts( kts.. www-sivu 7 http://lxr.linux.no lxr.linux.no/source/include/linux/list.hlist.h ) Muuttujien määm äärittelyt ja näkyvyyssäännöt #include <stdio.h> /* globaalit muuttujat tänne*/ double tulos; int main(int argc, char** argv) /* funktion muuttujat tänne */ for (i=0; i < 20; i++) /* Lohkon muuttujia */ int j; j = i*4; Lohkon sisäiset iset muuttujat Määritellään n lohkon alussa Eivät t näy n y lohkon ulkopuolelle Arvo ei säily s kutsukerrasta toiseen Lohko on mikä tahansa aaltosulkujen kattama ohjelman osa Funktiokin on lohko Globaalit muuttujat Määritellään n funktioiden ulkopuolella Näkyvät t myöhemmin määritellyille funktioille Arvo säilyy s suorituksen ajan 8 3

Poikkeamat näkyvyyssn kyvyyssäännöistä: Viittaaminen muualla määriteltyyn extern static int si; extern int ei; void f() int fi; static int sif; extern int eif; /* vältä tätä! */ void g(); static void h(); int eif; /* määritelty vasta täällä */ Määrittely on tällt llöin tyypillisesti jossain toisessa tiedostossa tai kirjastossa Samassa tiedostossa, mutta myöhemmin Vältä käyttöä!! Pyri määm äärittelemään muuttujat mahdollisimman paikallisesti, ja ainakin yhden tiedoston sisäll llä 9 Poikkeamat säilyvyysss ilyvyyssäännöistä: Funktion sisäinen inen muuttuja pysyväksi ja piiloon - static static int si; extern int ei; void f() int fi; static int sif; extern int eif; /* vältä tätä! */ void g(); static void h(); int eif; /* määritelty vasta täällä */ static määreellä muuttujan arvo säilyy s suorituskerrasta toiseen. Toisaalta static määre rajoittaa kyseisen muuttujan tai funktion (eli tunnuksen) näkyvyyttä.. Sitä ei voi tämän n jälkeen j käyttk yttää muista tiedostoista käsin. k (Vrt. javan private ) 20 Muuttujien sijoittelu muistiin Rekursio Extern määre kertoo kääk ääntäjälle, että tässä kohtaa muuttujalle ei tarvitse varata tilaa, koska muuttuja on määritelty muualla Static määre kertoo kääk ääntäjälle, että paikalliselle muuttujalle on varattava tilaa pinon ulkopuolelta, koska arvon pitää säilyä Register määre kertoo kääk ääntäjälle, että muuttujaa käytetään n niin paljon, että sille kannattaisi varata oma rekisteri prosessorilta tässt ssä lohkossa Muuttujan esittely ilman määm äärettä,, ns. automaattinen tilanvaraus globaaleille muuttujille tilanvaraus kääk äännösaikana paikallisille muuttujille tilanvaraus pinosta suoritusaikana Rekursiivinen funktio kirjoitetaan c:ssä ihan niin kuin muissakin kielissä Rekursion pysäytt yttämiseksi on rekursiivisen kutsun oltava jollakin tavalla ehdollinen. int digits ( int n) if (n <= 0) if (n/0 == 0) return ; return + digits (n/0); int digits ( int n) int count =0; if (n <= 0) do count ++; n /= 0; while ( n!=0); return count; paikallisille muuttujille tilanvaraus pinosta suoritusaikana 2 22 Osoittimet (pointers( pointers) Osoitin on muuttuja, jonka arvona on toisen muuttujan osoite. Osoittimien käyttk yttö perustuu siihen, että useimpien tietokoneiden muisti voidaan kuvata ikää ään n kuin valtavana yksiulotteisena taulukkona. Kaikki ohjelmat ja data sijaitsevat tässt ssä taulukossa. Osoitin on oikeastaan indeksi johonkin kohtaan muistia. Osoitinmuuttuja on erää äänlainen viitta, jonka avulla päästään n käsiksi k toiseen muuttujaan. 23 Vrt. Javan olioviite (joka oikeastaan on osoitin) 24 Vrt. Javan olioviite (joka oikeastaan on osoitin) TITO Xptr DC 0 X DC 2 LOAD R, =X STORE R, Xptr LOAD R2, X LOAD R3, @Xptr Tieto ja sen osoite (3) ; R 230 muisti Xptr=225: 230 ; R2 2 2345 ; R3 2 2556 Muuttujan X osoite on 230 28765 Muuttujan X arvo on 2 2222 Osoitinmuuttujan (pointterin) Xptr osoite on 225 X=230: 2 Osoitinmuuttujan Xptr arvo on 230 2998 jonkun tiedon osoite (nyt X:n osoite) Osoitinmuuttujan Xptr osoittaman kokonaisluvun arvo on 2 C-kieli: Y = *ptrx /* ei prtx:n arvo, mutta ptrx:n osoittaman muuttujan arvo */ 4

int main(int argc, char** argv) int x=, y=2, z[0]; int *ip; int *p, q; int *r, *s; ip=&x; y = *ip; /* y = x = */ *ip = 0; /* x = 0 */ ip = &z[0]; double atof(char *string); KOODI ESIMERKKI: HUOM: p on osoitin ja q tavallinen kokonaisluku x y z ip 2 0 Funktion parametrina osoitin on erittäin tavallinen 25 Viiteparametrit Välitetään n muuttujan osoite (eli viite), jos funktion pitää muuttaa muuttujan arvoa Funktion esittelyssä muodollinen parametri on osoitin void lue_muuttujaan (int *luku); Funktion kutsussa todellisena parametrina välitetään n muuttujan osoite lue_muuttujaan (&x); (kun int x;) lue_muuttujaan (ptr); (kun int *ptr;) 26 Viiteparametrin käyttö Esimerkkejä: funktion oma paluuarvo on tieto tehtävän onnistumisesta, tulos parametrissa /* Lue korkeintaan n merkkiä * Palauta merkin c esiintymisten lukumää äärä * Paluuarvona onnistumistieto! */ int readit(int n, char c, int *occurrences); /* Palauta lukujen n ja m summa ja tulo */ int compute(int n, int m, int *sum, int *product); 27 Vaihteleva parametrimää äärä (vrt. printf, scanf) Vähintään yksi nimetty ja tyypitetty parametri, loput kolme pistettä Parametrien käsittely (va_list, va_start, va_arg) #include<stdarg.h stdarg.h> /* return a product of double arguments */ double product(int number,...) va_list list; double p; va_start(list (list,, number); for(i = 0, p =.0; i < number; i++) p *= va_arg(list (list,, double); va_end(list (list); return p; Parametrilistan tyyppi AINA: Haetaan nimetty Haetaan seuraava HUOM: Ei autom. tyyppimuunnoksia 28 Vaihteleva parametrimää äärä OIKEIN: product(2, 2.0, 3.0) * product(, 4.0, 5.0) VÄÄRIN: product(2, 3, 4) Funktio-osoittimet osoittimet Vaikka funktiot eivät t ole muuttujia, niin niilläkin on osoite muistissa (kts( kts.. esim. TTK-9 konekieli). Tähän T n osoitteeseen voi viitata funktio-osoittimen osoittimen avulla. Osoitin määm ääritellään n seuraavasti paluutyyppi (*nimi) (parametrilista); int (*lfptr lfptr) ) (char( char[], int); lfptr = getline; /* kun int getline(char s[], int len); */ Vaihtelevassa parametrilistassa EI voi tehdä automaattista tyyppimuunnosta,, kun tyyppi ei ole tiedossa käännösaikana Funktio-osoittimen osoittimen avulla voidaan eri kutsukerroilla kutsua eri funktiota. Näin N voidaan rakentaa yleisiä aliohjelmia. (Esim. stdlib.h:ssa on funktio qsort,, joka saa parametrina järjestysfunktion) saikana! 29 30 5

Funktio-osoittimien osoittimien käyttö parametrina Funktioita voi kutsua useita kertoja Funktion paluuarvo ja parametrilista on tyypitetty Geneerisissä tietorakenteissa ja niiden käsittelyrutiineissa käytetään usein tyypittömi miä parametreja ja paluuarvoja: Yleiskäytt yttöisempiä rutiineja, mutta paljon enemmän virhemahdollisuuksia Usein alkion sisält ltöä käsittelevä funktio välitetään funktioparametrina 3 Esimerkki funktiotietue (kts. include/linux linux/quota.h) 23 /* Operations which must be implemented by each quota format */ 232 struct quota_format_ops 233 int (*check_quota_file)(struct super_block *sb, int type); /* Detect whether file is in our format */ 234 int (*read_file_info)(struct super_block *sb, int type); /* Read main info about file - called on quotaon() */ 235 int (*write_file_info)(struct super_block *sb, int type); /* Write main info about file */ 236 int (*free_file_info)(struct super_block *sb, int type); /* Called on quotaoff() */ 237 int (*read_dqblk)(struct dquot *dquot); /* Read structure for one user */ 238 int (*commit_dqblk)(struct dquot *dquot); /* Write structure for one user */ 239 int (*release_dqblk)(struct dquot *dquot); /* Called when last reference to dquot is being dropped */ 240 ; 32 6