You are on page 1of 19

A C programozsi nyelv VI.

Parancssori argumentumok File kezels


Ficsor Lajos Miskolci Egyetem ltalnos Informatikai Tanszk
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels) CBEV6 /

Parancssori argumentumok 1.
A programot parancssorbl indtva adatokat adhatunk meg szmra. A main fggvny prototpusnak teljes alakja
int main(int argc, char* argv[], char* env[])

A main fggvny visszatrsi rtkt az aktivizl program kapja meg.


0 visszaadott rtk: sikeres vgrehajts A visszatrsi rtket a main fggvny return utastsa, vagy brhol az exit fggvny llthatja be.
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

Parancssori argumentumok 2.
Az exit fggvnyhez az stdlib.h vagy process.h fejlcfile szksges. Prototpusa: void exit(int status) A main fggvny els kt paramtere a program aktivizlshoz hasznlt parancssorban tallhat paramtereket adja vissza

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

Parancssori argumentumok 3.
argc a paramterek szma + 1 argv[0] a parancssorban a prompt utn gpelt els stringre (a program neve, esetleg elrsi ttal) mutat pointer argv[1] az els paramterre mutat pointer . . argv[argc-1] az utols paramterre mutat pointer argv[argc] a NULL mutat
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

Parancssori argumentumok 4.
Hasonlan az env[0], env[1], ... , env[n-1] a program hvsakor rvnyes krnyezeti vltozkat tartalmazzk, (ahol n a krnyezeti vltozk szma), env[n]=NULL. A krnyezeti vltozk opercis rendszer fggk! A parancssor paramtereit helykz vlasztja el. Ha egy paramterben helykz lenne, azt idzjelek kz kell rni. (A program az idzjelet nem kapja meg!)
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

File a C nyelvben
A C byte-ok sorozataknt tekinti a file-okat. A programoz feladata a file tartalmt rtelmezni. Kivtel: ha a file-t text tpusnak deklarljuk
'\n' ("sorvg") karakter kirsa az opercis rendszertl fgg sor vge jelet generl sor vge jel beolvassa a '\n' karaktert eredmnyezi

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

File megnyitsa
Minden file-t egy FILE (elredefinilt) tpus struktra azonost. Van hrom elre definilt FILE* vltoz: stdin : standard input stdout : standard output stderr : standard hibacsatorna Minden file-t a hasznlata eltt meg kell nyitni. Ezzel kapunk egy egyedi azonostt, amellyel a ksbbiekben hivatkozunk r. (fopen fggvny)
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

Az fopen fggvny 1.
Prototpusa:
FILE* fopen(char* filenev, char* mod)

filenv paramter a file neve (az adott opercis rendszer szablyai szerint) mod egy, kt vagy hrom karakteres string, amely meghatrozza a file hasznlatnak a mdjt, az albbiak szerint:

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

Az fopen fggvny 2.
Md Hasznlat mdja jele r Csak olvassra w Csak rsra a r+ w+ a+ Hozzrs Olvass s rs Olvass s rs Olvass s hozzrs A megnevezett file-lal val kapcsolat Lteznie kell! Ha ltezik, elz tartalma elvsz, ha nemltezik, ltrejn egy j (res) file. Ha ltezik, az rs az elz tartalomvgtl kezddik. Ha nemltezik, ltrejn egy j file. Lteznie kell! Ha ltezik, elz tartalma elvsz, ha nemltezik, ltrejn egy j (res) file. Ha ltezik, az rs az elz tartalomvgtl kezddik. Ha nemltezik, ltrejn egy j file.

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

Az fopen fggvny 3.
A fggvny visszatrsi rtke a file ler struktrra mutat pointer, ha a megnyits sikeres, a NULL pointer egybknt. Szoksos hasznlata:
FILE* be; . . . if ((be=fopen("bemeno.txt","rt"))==NULL) { fprintf (stderr,"Nyitsi hiba!\n"); exit(1); /* A program befejezse */ } else { /* A file feldolgozsa */ }
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

10

A file lezrsa 1.
Minden file-t a hasznlata utn le kell zrni. Erre szolgl az int fclose(FILE* f)
paramtere a lezrand file lerja visszatrsi rtke 0 sikeres lezrsnl, EOF egybknt

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

11

A file lezrsa 2.
Megjegyzsek: A file lezrsa utn az azonostsra hasznlt vltoz jra felhasznlhat. A fprogram (main fggvny) vgn minden nyitott file automatikusan lezrdik, mieltt a program befejezi a futst. A file lezrsa eltt a nem res buffer is kirdik a file-ba. Ha a program futsa rendellenesen ll le, adatok veszhetnek el.
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

12

File rsa s olvassa 1.


int fprintf(FILE* f, char*s, . . . )

Mint a printf,csak az f file-ba r ki.


int fscanf(FILE* f, char*s, . . . )

Mint a scanf,csak az f file-bl olvas.


int getc(FILE* f)

Mint a getchar, csak az f file-bl olvas.


int putc(char c, FILE* f)

Kirja a c karaktert az f file-ba. Visszatrsi rtke a kirt karakter, hiba esetn EOF.
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

13

File rsa s olvassa 2.


int fputs(char*s, FILE* f)

Kirja az s stringet, a zr nulla nlkl. Visszatrs: az utoljra kirt karakter, vagy EOF.
char* fgets(char*s, int n, FILE* f)

Beolvas az s stringbe a sorvge karakterig, de maximum n-1 karaktert. A string vgre teszi a zr nulla karaktert. Visszatrsi rtke a beolvasott stringre mutat pointer, vagy NULL.

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

14

File rsa s olvassa 3.


int fread(void* p, int meret, int n, FILE* f)

A fggvny n db, meret mret adatot olvas be, s elhelyezi azokat a p cmtl kezdden. A p tetszleges objektumot megcmezhet. A programoz felelssge, hogy
a memriaterlet elegend hosszsg-e a feltlttt memriaterlet rtelmezhet-e.

Visszatrsi rtke a beolvasott adatok szma. Hiba vagy file vge esetn ez n-tl kisebb.
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

15

File rsa s olvassa 4.


int fwrite(void*p, int meret, int n, FILE* f)

Mint az fread, de kir.

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

16

Pozicionls a file-ban 1.
Minden file-hoz tartozik egy aktulis pozci, amit byte-ban szmtunk. Egy file megnyitsa utn az aktulis pozci 0, azaz a file elejre mutat. A vgrehajtott rsi s olvassi m veletek az aktulis pozcit is lltjk, az tvitt byte-ok szmnak megfelelen. Az aktulis pozcit a programbl is llthatjuk (a file tetszleges sorrendben feldolgozhat)
Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

17

Pozicionls a file-ban 2.
int fseek(FILE* f, long offset, int bazis)

Hozzadja (eljelesen!) az offset rtkt a bazis ltal meghatrozott rtkhez, s ez lesz az j aktulis pozci. bazis lehetsges rtkei (elredef. konstansok):
SEEK_SET a file eleje SEEK_CUR az aktulis file pozci SEEK_END a file vge

Visszatrsi rtke 0, ha sikeres, nem 0 egybknt.


Ficsor Lajos A C programozsi nyelv VI. (Parancssori argumentum, file kezels CBEV56/

18

Pozicionls a file-ban 3.
long ftell(FILE* f)

Visszaadja az aktulis file pozci rtkt, a file elejtl szmolva. Sikertelensg esetn a visszatrsi rtk -1.
void rewind(FILE* f)

A file elejre lltja a file pozcit.

Ficsor Lajos

A C programozsi nyelv VI. (Parancssori argumentum, file kezels

CBEV56/

19

You might also like