Rad sa datotekama korištenjem open(), read(),
write() i close()
Prethodni primjeri rada s datotekama rade sa
File Control Blocks (FCB). Pod MSDOS v3.x (ili veći) i UNIX sustavima,
pri rukovanju datotekama se češće koriste handleri, a ne kontrolni blokovi
datoteka.
Pisanje programa korištenjem handlera omogućava
prenosivost izvornog koda između različitih operativnih sustava. Uporaba
handlera dozvoljava programeru da tretira datoteku kao tok znakova.
open()
#include <fcntl.h> int open( char *filename, int access, int permission );Dozvoljeni modovi pristupa datotekama su
O_RDONLY O_WRONLY O_RDWR O_APPEND O_BINARY O_TEXTDozvoljeni rad je
S_IWRITE S_IREAD S_IWRITE | S_IREADopen() funkcija vraća integer vrijednost, koja se odnosi na datoteku. Ako je neuspješan pristup, vraća se -1, i postavlja se globalna varijabla errno da pokazuje na tip pogreške.
read()
#include <fcntl.h> int read( int handle, void *buffer, int nbyte );read() funkcija pokušava pročitati n bytova iz datoteke na koju pokazuje handler, i smješta pročitane znakove u buffer. Ako se datoteka otvori korištenjem O_TEXT, ona pomiče povrat prijenosa (carriage return) i detektira kraj datoteke.
Funkcija vraća broj pročitanih bytova. Za end-of-file,
vraća 0, za pogrešku -1, postavljajući errno da pokazuje tip pogreške
koja se dogodila.
write()
#include <fcntl.h> int write( int handle, void *buffer, int nbyte );write() funkcija pokušava napisati n bytova iz buffer u datoteku na koju je povezan handler. U tekst datotekama, proširuje svakiLF u CR/LF.
Funkcija vraća broj bytova napisanih u datoteci.
Vraćena vrijednost -1 pokazuje pogrešku, te je errno ispravno postavljen.
close()
#include <fcntl.h> int close( int handle );close() funkcija zatvara datoteku na koju je povezan handler. Funkcija vraća 0 ako je uspješno zatvorila, -1 indicira pogrešku, te je errno ispravno postavljen.