PHP Code:
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <st***.h>
/***
*
*
*
* Simulazione di gestione sezione critica mediante uso di file
*
*
*
*
****/
#define PATH "/tmp/lock"
#define TRY 5
int check ( void ) {
int fd,t,err;
fd=open(PATH,O_CREAT | O_RDWR | O_EXCL,00751);
err=errno;
if (fd > 0) {return 1;}
for(t=1;fd==-1 && err == EEXIST && t <= TRY;t++) {
fd=open(PATH,O_CREAT | O_RDWR | O_EXCL,00751);
err=errno;
}
if (fd > 0) {return 1;} else {return 0;}
}
void return_check ( void ){
int err;
err= unlink(PATH);
if ( err == -1 ) { fprintf(stderr,"Impossibile controllare semaforo dopo sezione critica\n"); exit(-1);}
}
int main ( void ) {
if ( check() == 1){
/*////////////////// sezione critica /////////*/ fprintf(stdout,"Sezione critica eseguita\n");
return_check();
} else {
fprintf(stderr,"Impossibile entrare in sezione critica\n");
exit(-2);
}
return 0;
}