Vissza
Állománykezelés
Feladatok:
1. Olvassuk ki egy tetszőleges
szöveg állomány tartalmát, mely egész
számokat tartalmaz, egy tömbe, majd írjunk
függvényt mely meghatározza a tömb elemei
közül a maximumot. (Forráskód)
2. Adott a következő
struktúrájú file:
név, cim(város név), életkor,
telefonszám. Hozzuk létre a filet (töltsük fel
adatokkal), majd végezzük el a következő műveleteket:
- rendezzük
a qsort könyvtárfügvénnyel az
adatokat, a nevek szerint növekvő sorrendbe.
- határozzuk
meg fileban szereplő személyek az átlag
életkorát.
- változtassuk meg egy adott címmel rendelkező
személyek telefonszámát ( pl. a
vásárhelyiek telfonszáma megváltozik )
- szúrjunk be további személyeket a fileban
- töröljünk adott személyket a fileból
- határozzuk meg, hogy melyik városban van a
legtöbb
személy nyilvántartva
- adott név alapján keressük meg a
személy
telefonszámát
Fontosabb felső szintű file kezelő függvények
FILE *
fopen ( const char * fname, const char * mode);
hiba
esetén NULL pointert térít vissza
int remove
(const char * filename);
törli a
megadott nevű file-t . Hiba esetén visszatérési
érték 0-tól különböző .
int rename
(const char * oldname, const char * newname);
átnevezi
a megadott nevű file-t .
int fgetc( FILE * fp);
int fputc(char c, FILE * fp);
karakter
írás-olvasás
size_t fread(void * ptr, size_t size, size_t n, FILE *fp);
size_t fwrite(const void * ptr, size_t size, size_t n, FILE *fp);
olvasás/írás,
a ptr mutatóval címzett tömb be/ből n darab size
hosszúsagú csomagot, visszatérési
értéke: a reálisan átvitt csomagok
száma
feof() és
ferror() használjuk a hibák tesztelésére
char * fgets(char * s, int
n, FILE * fp);
egy szövegsort,
maximum n-1 karaktert olvas, végére '\0' -t illeszt (de beolvassa a '\n'
-t is a sor végére, ellentétben a gets()
függvénnyel),
visszatérési érték: s, illetve NULL
hiba vagy EOF esetén.
char * fputs(const char *
s, FILE * fp);
kiírja a
stringet a file-ba
visszatérési
értéke: pozitív egész, illetve EOF hiba
esetén
int ungetc ( int c, FILE *
fp );
"visszaküldi"
az utolsó olvasott karaktert a file-ba
int fscanf ( FILE *fp,
char * format, ...);
int fprintf( FILE *fp, char * format, ...);
a printf/scanf file
szintű megfelelői
int fseek(FILE * fp, long
offset, int origin);
más
pozicióra lépteti a file mutatót, az új
pozició helye: az origin pozició + offset
számú byte (karakter)
visszatérési értéke hiba esetén nem
nulla
az origin lehet:
SEEK_SET
(file eleje),
SEEK_CUR (pillanatnyi hely),
SEEK_END (file vége).
long ftell(FILE *
fp);
visszatéríti
a file mutató pillanatnyi poziciójat a file-ban.
visszatérési értéke pozitív long
egész, illetve EOF hiba esetén
int fgetpos
(FILE * fp, fpos_t * ptr);
int fsetpos
(FILE * fp, const fpos_t ptr);
a két
függvény az új pozicióra ugrást oldja
meg együtt
int fclose(FILE *
fp);
lezárja a
file-t. kiírja a buffer adatait, felszabadítja az fp-t
visszatérési érték: 0 illetve EOF
hiba esetén
int fflush( FILE *
fp );
lemezre írja
az fp-hez rendelt buffert. Amennyiben az fp helyett egy NULL
mutatót adunk argumentumként, valamennyi irasra nyitott
file bufferet kiírja. Hiba esetén a
visszatérési érték EOF,
egyébbként 0.
void rewind( FILE
* fp );
visszaugratja a file mutatót a file elejére
FILE *
freopen( const char * path, const char * mode, FILE * fp );
megnyitja a file-t átirányitás végett,
példaul:
freopen (
"out.txt","w", stdout); átirányitja a standard kimenetre
(stdout) írt adatokat a out.txt nevű, lemezen
található file-ba.
Hibakezelés
int ferror
(FILE * fp);
visszatérési értéke 0 illetve
más egész szám hiba esetén
int feof(FILE
* fp);
visszatérési értéke 0 illetve
más egész szám EOF esetén
void
perror(const char * s)
kiírja az s stringet és az errno változóban
levő kódnak megfelelő hibát.
Hibát a
stderr -re írunk, utána az exit (int n )
függvényt használjuk amennyiben a programból
kell kilépni, illetve return n -et függvény
esetén.
1.
#include
<stdio.h>
#include
<stdlib.h>
int
maximum(int * tomb, int n);
void
main()
{
FILE *in;
char nev[15];
printf("az allomany neve:");
scanf("%s", nev);
in = fopen(nev, "r");
int i, m;
int *x = (int*)malloc(100*sizeof(int));
if(in == NULL)
{
printf("Nyitasi hiba\n");
return;
}
i = 0;
while(1)
{
fscanf(in,"%i",&x[i]);
if( feof(in) ) break;
i++;
}
fclose(in);
m = maximum(x,i);
printf("A szamok maximuma: %i\n",m);
free (x);
}
int
maximum(int * tomb, int n)
{
int i;
int m = tomb[0];
for (i=1; i<n; i++)
if(m < tomb[i]) m = tomb[i];
return m;
}
Vissza