PDA

View Full Version : [C] File lock


Unrue
08-07-2008, 23:40
Ciao ragazzi,
ho implementato un lock su file tra vari processi con le struct flock. Perņ ho un problema: alcuni processi riescono a terminare, altri no, si bloccano in attesa. Come se qualcuno non rilasciasse il lock sul file.

Questo č il codice in cui definisco la struttura:

struct flock fl;
fl.l_type= F_WRLCK; // tipo di lock
fl.l_whence = SEEK_SET; // offset
fl.l_start = 0; // Offset per l_whence
fl.l_len = 0; // lunghezza
fl.l_pid = getpid(); // PID del processo

fd = open("/out",
O_WRONLY | O_CREAT,0777);


Questa č la routine per il locking, scrittura su file ed unlocking:


int write_plane(struct flock*fl,float*plane,int fd, int*local_planes, size_t*dim_mat, int me, int num_plane) {

int fun;
int jump, ris;

int dim_plane = dim_mat[0]*dim_mat[1];

fun = fcntl(fd, F_SETLKW, fl); // attendo per avere il lock

jump = 0;

if( me == 0) jump = dim_plane*num_plane*sizeof(float);
else {
for(int i=0; i < me; i++) jump += (dim_plane*local_planes[i])*sizeof(float);

jump += dim_plane*num_plane*sizeof(float);

}

lseek(fd,jump,fl->l_whence);

ris = write(fd,plane,dim_plane*sizeof(float));

fl->l_type = F_UNLCK; /* cambio il lock */
fcntl(fd, F_SETLK, fl); /* sblocco la regione */

return ris;
}


Thanks :)