Сигнализација грешака

Размотримо мало детаљније функцију feof. Подсетимо се да она испитује да ли се приликом читања дошло до краја датотеке.

Њен облик је:

int feof(datoteka); 

Приликом читања података из датотеке, показивач пролази кроз датотеку и као повратну вредност враћа 0. Када дође до краја датотеке, враћа вредност различиту од нуле.

Претходно дефинисане функције употребићемо читајући датотеку по имену datoteka.txt. Њен садржај је:

Funkcija ftell daje trenutnu vrednost pokazivaca u odnosu na pocetak fajla.

Прочитати садржај датотеке datoteka.txt почевши од 13. знака до краја датотеке.

#include<stdio.h>
int main(void)
{
    FILE* ulaz;
    ulaz = fopen("datoteka.txt", "r");
    if (ulaz == NULL)
    {
        printf("Greska pri otvaranju fajla");
        return 1;
    }
    fseek(ulaz, 12, SEEK_SET);
    int p = ftell(ulaz);
    printf("Citamo fajl od %d. pozicije:\n", p + 1);
    while (!feof(ulaz))
    {
        char c;
        c = fgetc(ulaz);
        putchar(c);
    }
    fclose(ulaz);
}

Резултат извршавања програма:

Citamo fajl od 13. pozicije:
ll daje trenutnu vrednost pokazivaca u odnosu na pocetak fajla.

Наредбом fseek(ulaz, 12, SEEK_SET) позиционирали смо се после 12. знака јер, подсетимо се, сваки карактер заузима један бајт:

Funkcija ftell daje trenutnu vrednost pokazivaca u odnosu na pocetak датотеке.

Наредбом int p = ftell(ulaz) чита се вредност показивача од почетка датотеке и додељује променљивој p. Од наредног, 13. знака читамо садржај датотеке до краја.

Прочитати колико има знакова у датотеци datoteka.txt.

#include<stdio.h>
   int main(void)
{
    FILE* ulaz;
    ulaz = fopen("datoteka.txt", "r");
    if (ulaz == NULL)
    {
        printf("Greska pri otvaranju fajla");
        return 1;
    }
    fseek(ulaz, 0, SEEK_END);
    int p = ftell(ulaz);
    printf("Fajl ima %d karaktera\n", p);
    fclose(ulaz);
}

Резултат извршавања програма:

Fajl ima 75 karaktera.

Из датотеке datoteka.txt прочитати последња три карактера.

#include<stdio.h>
int main(void)
{
    FILE* ulaz;
    ulaz = fopen("datoteka.txt", "r");
    if (ulaz == NULL)
    {
        printf("Greska pri otvaranju fajla");
        return 1;
    }
    fseek(ulaz, -3, SEEK_END);
    while (!feof(ulaz))
    {
        char c;
        c = fgetc(ulaz);
        putchar(c);
    }
    fclose(ulaz);
}

Резултат извршавања програма:

la.

Наредбом fseek(ulaz, -3, SEEK_END) показивач је позициониран за три места пре краја датотеке.

Funkcija ftell daje trenutnu vrednost pokazivaca u odnosu na pocetak faj|la.

Од те позиције до краја датотеке се чита њен садржај.