You are on page 1of 49

C

:
.


.
3

/





. ()

/


(reading)

(writing) .

:
,

5


().

(\n) .

()
(,
.).

(),



.
6




.

.


().

/

#include<stdio.h>

:




10


/
.

,
,
...


FILE.
11

FILE
struct _iobuf
{
char _ptr;
int
_cnt;
char *_base;
int
_flag;
int
_file;
} FILE;

12

/*
/*
/*
/*
/*

trenutna pozicija pokazivaca */


trenutno stanje broja bajtova */
polazna adresa rezer. memorije */
indikator */
brojna oznaka fajla */


,
.

( )
.


.

13


fopen(putanja i ime fajla,mod_rada);
r (read) . .
w (write) .
, .
a (append), .
.
r+ .
.
w+ .
.
.
a+ .
.
.
14




b.
:
"rb"
"wb"
"ab"
"rb+ "wb+ "ab+"

15


()


.
:
int fclose(FILE *ptr_fajl);
fclose :
0

.
16


#include <stdio.h>
main( )
{
FILE *ptr_file1, *ptr_file2 ;
int i;
ptr_file1=NULL;
ptr_file2=NULL;
/* Otvori za citanje */
ptr_file1 = fopen("data1.txt", "r" )
if(ptr_file1 == NULL )
printf( "Fajl NIJE otvoren\n" );
else
printf( "\nFajl je otvoren \n" );
17

/* Otvori fajl za citanje i upis */


ptr_file2 = fopen( "data2.txt", "w+" )
/* Zatvori prvi fajl */
i= fclose(ptr_file1 )
if(i!=0)
printf( " Fajl NIJE zatvoren\n " );
else
printf( " Fajl je zatvoren\n " );
/* Svi preostali fajlovi se zatvaraju: */
fcloseall( );
}
18


fgetc
. :

int fgetc( FILE *ptr_fajl );

19

fgetc
#include <stdio.h>
main( )
{
FILE *ptr_ulaz;
char buffer[81];
int i, ch;

buffer[i] = '\0';
printf( "%s\n", buffer );
fclose( ptr_ulaz );
}

ptr_ulaz=fopen("opis.txt","r");
for(i=0; (i < 80 ); i++ )
{
ch = fgetc( ptr_ulaz );
buffer[i] = (char)ch;
}

20

FGETC.C: This program uses getc to read


the first 80 input characters (or until


fputc
fputc
.
int fputc( int c, FILE *ptr_fajl );


EOF .

21

fputc
#include <stdio.h>
void main( void )
{
FILE *ptr_out;
char niz[] = "Ovo je primer za fputc!\n";
int i;
ptr_out = fopen( "upis.txt", "w" )
i=0;
while(niz[i]!= '\0')
{
fputc(niz[i] , ptr_out )
i++;
}
}
22


fgets
.
fgets

(\n) n-1 .
fgets( char *niz, int n, FILE *p_fajl);



NULL .
23

fgets
#include <stdio.h>
void main( void )
{
FILE *ptr_ulaz;
char niz[50];
ptr_ulaz = fopen("ulaz.txt", "r")
fgets( niz, 40, ptr_ulaz )
printf( "%s\n", niz);
fclose( ptr_ulaz);
}
Ovo
je
primer
za
funkciju
fgets.
U
ovom
24


fputs
fputs
.
fputs(char *niz, FILE *ptr_fajl );



EOF .
25

#include <stdio.h>
void main( void )
{
FILE *ptr_out;
char niz[] = "Ovo je primer za fputs!";
ptr_out = fopen("upis.txt", "w")
fputs(niz, ptr_out);
fclose(ptr_out);
}

26



printf scanf.

fprintf
fscanf
B
, ,

.

27


#include <stdio.h>
FILE *ptr_fajl;
void main( void )
{
int
i = 10;
double fp = 1.5;
char
niz[] = "Ovo je jedan niz podataka";
char
karakter = '\n';
ptr_fajl = fopen( "izlaz.txt", "w" );
fprintf( ptr_fajl, "%s%c", niz, karakter );
fprintf( ptr_fajl, "%d\n", i );
fprintf( ptr_fajl, "%f\n", fp );
fclose( ptr_fajl );
}
28


fwrite
fwrite(void *bafer,int velicina,int broj,FILE
*ptr_ime);

fwrite (ptr_ime)
broj .

(velicina)

(bafer).

.
29

#include <stdio.h>
void main( void )
{
FILE *ptr_izlaz;
list[]={1,2,3,4,5,16,7,683,9,10,11,12,13,14};
ptr_izlaz = fopen("izlaz.txt","wb")
fwrite( list, sizeof( int ), 10, ptr_izlaz );
fclose( ptr_izlaz);
}

30


fread
fread(void *bfer, int velicina,
int broj, FILE *ptr_ime);
fread (ptr_ime)
broj velicina

(bfer).

.
31

...
ptr_ulaz = fopen( "izlaz.txt", "rb" )
fread(list2, sizeof(int), 10, ptr_ulaz);
printf( "Sadrzaj niza list2 je \n");
for(i=0; i<10;i++)
printf( "%d ",list2[i]);
fclose( ptr_ulaz );
...
1 2 3 4 5 16 7 683 9 10
32


fseek
fseek( FILE *ptr_ime,
long offset, int origin );
origin
SEEK_CUR:
SEEK_ND:
SEEK_SET:

33


ftell
ftell
. :
long ftell( FILE *ptr_ime);

34


feof
feof
.
int feof(FILE *ptr_ime);


0


.
35

Ilustracija fopen() funkcije


Sledei deo koda ilustruje rad fopen funkcije i
testira da li je ona pravilno odradila posao:
#include <stdio.h>
FILE *input_file, *fopen ();
input_file = fopen("datain", "r");
if( input_file == NULL )
{
printf("*** datain could not be opened.\n");
printf("returning to dos.\n"); exit(1);
}
36

Ilustracija fopen() funkcije


Otvaranje i testiranje uspenosti mogu biti
kombinovani na sledei nain
if(( input_file = fopen ("datain", "r" )) ==
NULL )
{
printf("*** datain could not be
opened.\n"); printf("returning to dos.\n");
exit(1);
}
37

Preuzimanje i dodavanje u fajl


Pojedinani karakteri mogu biti proitani ili
upisani u fajl korienjem funkcija getc() i
putc().
Obratite panju, ove funkcije su sline
funkcijama getchar() i putchar(), osim to se
kod getc() i putc() kao argument prilikom
poziva mora navesti i ulazno/izlazni ureaj
sa kojim se radi.

38



int ch; ch = getc( input_file );

/* assigns character to ch */

getc() takoe vraa i EOF (end of file), tako da


while( (ch = getc( input_file )) != EOF )
Dodavanje novog reda u fajl:
putc('\n', output_file );

39


Kada se rad sa fajlom zavri, potrebno je zatvoriti taj
fajl, pre zavretka rada programa.
Ovo se radi da bi operativni sistem oslobodio sve
resurse koje je rezervisao za fajl: memoriju, bafere i
slino,
Za ovaj proces je zaduena funkcija fclose(), kojoj se
prosleuje pokaziva na odreeni fajl kao argument.
fclose( input_file );
fclose( output_file );
40

41

#include <stdio.h>
main() /* FCOPY.C */
{ char in_name[25], out_name[25];
FILE *in_file, *out_file, *fopen ();
int c;
printf("File to be copied:\n");
scanf("%24s", in_name);
printf("Output filename:\n");
scanf("%24s", out_name);
in_file = fopen ( in_name, "r");
if( in_file == NULL )
printf("Cannot open %s for reading.\n", in_name);
else
{ out_file = fopen (out_name, "w");
if( out_file == NULL )
printf("Can't open %s for writing.\n",out_name);
else {
while( (c = getc( in_file)) != EOF ) putc (c, out_file);
putc (c, out_file); /* copy EOF */
printf("File has been copied.\n");
fclose (out_file); } fclose (in_file); } }

Testiranje za kraj fajla


Za ovo slui funkcija feof() koja je
standardna funkcija iz biblioteke stdio.h.
Ova funkcija vraa vrednost 1, ako
prosleeni pokaziva, pokazuje na kraj fajla
if( feof ( input_file ))
printf("Ran out of data.\n");

42

fprintf() i fscanf()
fprintf() i fscanf() rade isto kao i printf() i
scanf(), osim to rade sa fajlovima.
Proui ta e da uradi:
fprintf(output_file, "Now is the time for
all..\n");
fscanf(input_file, "%f", &float_value);

43

fgets() i fputs() funkcije


Korisne su kada se iz fajla ita, ili u fajl upisuje ceo red
podataka.
Ako je buffer pokaziva na karakter, i n najvei broj
karaktera koji e biti preuzeti onda:
fgets (buffer, n, input_file);
Ovaj iskaz preuzima iz fajla u buffer, sve karaktere do
NULL karaktera, ili do n karaktera, i na kraju tog niza
stavlja NULL karakter
fputs (buffer, output_file);
Ovaj iskaz ubacuje u fajl sve karaktere iz bafera sve dok
ne doe do NULL karaktera, i pravi novi red u izlaznom
44fajlu (NULL karakter se ne prebacuje)

Rad sa fajlovima korenjem open(), read(),


write() and close()

Prethodni primeri se odnose na rad sa


kontrolnim blokovima fajlova. Meutim pod
operativnim sistemima DOS i UNIX, sa
fajlovima se radi korienjem tkzv handles, a
ne kontrolnih blokovima.
Korienje ovog koncepta omoguuje
potpunu prenosivost progarama.
Takoe, pod ovim konceptom programer
tretira fajl kao tok podataka.
45

open()
#include <fcntl.h>
int open( char *filename, int access, int permission );

The available access modes are


O_RDONLY O_WRONLY O_RDWR
O_APPEND O_BINARY O_TEXT
The permissions are
S_IWRITE S_IREAD S_IWRITE | S_IREAD
U sluaju neuspenog otvaranja vraa se
vrednost -1.
46

read()
#include <fcntl.h>
int read( int handle, void *buffer, int nbyte );
ita n bajtova fajla na koji ukazuje handle, i
smeta u bafer.
Vraa broj proitanih bajtova, 0 ako je na kraju
fajla, i -1 u sluaju greke.

47

write()
#include <fcntl.h>
int write( int handle, void *buffer, int nbyte );
Funkcija upisuje n bajtova iz bafera u fajl na
koji ukazuje handle.
Vraa broj upisanih bajtova, ili -1 ukoliko je
dolo do greke.

48

close()
#include <fcntl.h>
int close( int handle );
Ova funkcija zatvara fajl na koji upuuje
handle.
Funkcija vraa 0 ako je fajl uspeno
zatvoren, i -1, ako je dolo do greke.

49

You might also like