Professional Documents
Culture Documents
Programski Jezik C - Datoteke
Programski Jezik C - Datoteke
PROGRAMSKI JEZIK C
Datoteke
Tokovi podataka
Tok podataka
Podrazumevani ureaj
stdin
standardni ulaz
tastatura
stdout
standardni izlaz
ekran
stderr
ekran
Navedeni
Redirekcija ulaza
Redirekcija izlaza
U tekstualnim datotekama
bajtovi reprezentuju karaktere
sadraj je itljiv
U binarnim datotekama
bajtovi ne moraju reprezentovati karaktere
grupe bajtova mogu reprezentovati vrednosti drugih tipova
podataka (int, float, vrednosti)
sadraj datoteke je kopija sadraja memorije raunara
(nema konverzije)
00110010
00110111
00110110
00110111
Binarna datoteka
01111111
11111111
Organizovane po linijama
Otvaranje datoteke
Otvaranje datoteke
FILE *fp;
fp=fopen(c:\\project\\demo.txt, r);
if( fp == NULL) {
printf(Greska pri otvaranju datoteke);
exit(EXIT_FAILURE);
}
FILE *fp;
fp=fopen(c:/project/demo.txt, r);
Zatvaranje datoteke
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME example.dat
int main(void) {
FILE * fp=fp=fopen(FILE_NAME, r);
if( fp == NULL) {
printf(Greska pri otvaranju datoteke: %s\n, FILE_NAME);
exit(EXIT_FAILURE);
}
fclose(fp);
return EXIT_SUCCESS; /* ili return 0; */
}
Baferovanje (buffering)
fflush(fp);
Formatirani Ulaz/Izlaz
int fscanf(FILE *stream, const char fmt[], ...);
int fprintf(FILE *stream, const char fmt[], ...);
scanf(fmt, ...);
printf(fmt, ...);
Testiranje indikatora
feof(fp);
ferror(fp);
while ( !feof(fp) ) {
/* obrada */
}
Karakter Ulaz/Izlaz
int fgetc(FILE *stream)
fgetc(stdin)
putchar(c)
fputc(c, stdout)
int c, n = 0;
while((c = getc(fp)) >= '0' && c <= '9')
n = 10 * n + (c - '0');
ungetc(c, fp); /* nije cifra vrati znak na ulazni tok */
Linijski Ulaz
fgets(char str[], int n, FILE *stream)
Umesto
gets(str)
bezbednije je
Linijski Izlaz
int fputs(char str[], FILE *stream)
fcopy.c
#include <stdio.h>
if((indat=fopen(datoteka, "r"))==NULL) {
printf("Error: otvaranje datoteke: "
"%s!!!", datoteka);
exit(EXIT_FAILURE);
}
while(!feof(indat)){
fgets(linija[i], MAXLINE, indat);
i=++i%n;
ukupno_lin++;
}
if(ukupno_lin>=n) {
for(j=i; j<n; j++)
printf("%s", linija[j]);
}
for(j=0; j<i; j++)
printf("%s", linija[j]);
fclose(indat);
return 0;
#define MAXNAME 20
#define MAXLINE 80
#define MAXN 100
int main() {
char datoteka[MAXNAME+1];
char linija[10][MAXLINE];
FILE *indat;
int n, i=0, ukupno_lin=0, j;
printf("Unesite naziv datoteke: ");
scanf("%s", datoteka);
printf("Unesite broj linija: ");
scanf("%d", &n);
Blokovski Ulaz/Izlaz
Blokovski Ulaz/Izlaz
printf("a[%d]=%d\n", i, a[0]);
fclose(indat);
return 0;
}