Alles staat en valt met het feit dat iedere gebruiker van het bestand eerst test of de 'lock-file' gegeven is . Doet men die niet dan heeft het niet veel zin om op deze manier een bestand uniek toegangkelijk te maken .
Het is een beetje tevergelijken met de P-V semaforen (Dijkstra-Hoare) .
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> //#include <unistd.h> #include <errno.h> /* alleen nodig als je 'perror() gebruikt */ #define FNAME "locki" int filelock(char* filename,int mode) { int result,fd; char* lck=malloc(strlen(filename)+4); /*maybe memcpy works faster ?*/ strcpy(lck,filename); strcat(lck,".lck"); if (mode) { fd = open(lck, O_WRONLY|O_CREAT|O_EXCL); if (fd<0 && errno==EEXIST) { /* file already exits another process is holding the lock */ result=-1; } else if(fd<0) { // perror("Locking failed for following reason"); result=-2; } else { /* locked write maybe pid to file or canbe used for other ID's */ sprintf(lck,"%d\n",getpid()); /* this means that PID must be shorter or equal as len(lck) ! */ write(fd,lck,strlen(lck)+1); result=0; } close(fd); } else { remove(lck); result=0; } free(lck); return result; } int main(int argc, char **argv) { int islock; char buffer[100]; islock = filelock(FNAME,1); if(islock){ printf("no lock\n"); } else { printf("has lock\n"); } /* unlock */ filelock(FNAME,0); return 0; }
Waarom
Als je een modem apparaat hebt wil je meestal dat deze maar door 1 gebruiken wordt gebruikt .
Dit kun je berijken door het modem te locken aan 1 gebruiker .Database file's hebben ook een probleem als meerdere gebruiker gelijktijdig informatie zouden willen wijzigen of toevoegen .
Dat betekend dat voordat een gebruiker gaat wijzigen in een database hij deze moet locken opdat zeker is dat hij opdat moment de enigste is die er in ziet te schrijven .
Heb je nuttige tips mail mij