Shranimo jih lahko kot int
STDIN_FILENO: stdinSTDOUT_FILENO: stdout
Ali po imenu datoteke:
int deskriptor = open("pot/ime", {dovoljenje}) // vrne deskriptor
Dovoljenja:
O_RDONLY: samo branjeO_WRONLY: samo pisanje
Možno je tudi kombiniranje dovoljenj, vendar ni potrebno za to nalogo.
Primer uporabe open:
int vhodnaDatoteka = open("a.txt", O_RDONLY);
flock(deskriptor, {tip zaklepanja})
Tipi zaklepanja:
LOCK_SH: deljena ključavnica (SH= shared)LOCK_EX: ekskluzivna ključavnica (EX= exclusive)LOCK_UN: odkleni (UN= unlock)
Branje v buffer (char array):
read(deskriptor, {pointer na buffer}, {dolzina bufferja})
Read vrne število prebranih znakov. Zanko za branje ustavimo, ko vrne 0.
zapisovanje n znakov iz bufferja:
write(deskriptor, {pointer na buffer}, {stevilo znakov za zapis})
Hint: zapiši število znakov, ki jih je vrnil read.
Zapiranje deskriptorja:
close(deskriptor)
Zapremo lahko tudi stdin ali stdout.
Do napake je prišlo, če:
openvrne -1flockvrne -1- število zapisanih znakov ni enako podanemu številu znakov za zapis
Izpisovanje napake:
perror("Napaka")
perror za podan niz doda ": sporočena napaka", tako bo zgornji primer v primeru, da datoteka ne obstaja, izpisal:
Napaka: No such file or directory
Koda napake je shranjena v spremenljivki errno.
- odpri vhodno in izhodno datoteko
- preveri če je pri odpiranju prišlo do napake
- (zakleni datoteki)
- beri iz vhodne, zapisuj v izhodno, vsakič preveri za napako
- (odkleni datoteki)
- zapri datoteki
Pri zaklepanju pa moramo najprej odpreti datoteko, saj moramo dobiti deskriptor datoteke.
Vrstni red odklepanja in zapiranja ni pomemben.
#include <sys/file.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>