C/Visual C - función flock

 
Vista:

función flock

Publicado por vetustas (6 intervenciones) el 26/02/2005 20:06:55
Hola,
tengo problemas con la función flock. Me explico: tengo que obtener acceso exclusivo a un fichero usando esta función. También tengo que hacer uso de la opción LOCK_NB y de la variable errno con valor EWOULDBLOCK. El caso es que no consigue que funcione. Alguien me puede poner un ejemplo de cómo se usa esta función? y además qué se supone que devuelve exactamente?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:función flock

Publicado por chuidiang (677 intervenciones) el 28/02/2005 10:37:30
Hola:

Acabo de leerlo, así que quizás esté equivocado.

Para bloquear el fichero deberías poner

int error = flock(fichero, LOCK_EX | LOCK_NB);

La función devolverá 0 si todo va bien.
Devuelve -1 si el fichero ya tiene un bloqueo exclusivo. Entonces deberás mirar el EWOULDBLOCK para confirmar que es ese el problema y no otro

if (error == -1)
if (errno == EWOULDBLOCK)
printf ("El fichero ya esta bloqueado\n");

De todas formas, la función flock() unicamente pone una marca. Aunque el fichero esté marcado, otro programa puede acceder normalmente. De alguna forma, para que esto funcione, requiere que todos los programas intenten bloquear el fichero antes de usarlo, que solo lo usen si consiguen bloquearlo y que lo liberen cuando hayan terminado.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:función flock

Publicado por vetustas (6 intervenciones) el 28/02/2005 18:39:06
Es que lo tengo puesto asi y siempre me da el error EBADF The filedes argument is not a valid open file descriptor. El código que tengo es el siguiente:

fich=fopen("mail.lock","w+");

printf("Vamos a llamar a flock\n");

error = flock(fich, LOCK_EX | LOCK_NB);

Qué estaré haciendo mal?

Por cierto, muchas gracias por contestar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:función flock

Publicado por chuidiang (677 intervenciones) el 01/03/2005 08:40:25
Hola de nuevo:

La funcion fopen() devuelve un puntero a FILE, mientras que flock() admite un entero. Compila porque un puntero realmente es un entero, pero no tiene nada que ver con el descriptor de fichero.

Tienes dos opciones:

- abre el fichero con open() en vez de fopen()
- Llama a la funcion fileno(); que le pasas un FILE y te devuelve el int asociado.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:función flock

Publicado por vetustas (6 intervenciones) el 04/03/2005 00:41:48
Muchas gracias por responder a mi pregunta. Ya me funciona. Lo único que ahora tengo una máquina que no me reconoce la función flock. Me da el siguiente error al compilar:

Undefined first referenced
> symbol in file
> flock /var/tmp/cca0065B1.o
> ld: fatal: Symbol referencing errors. No output written to a.out

Ya intenté meterle todas las librerias que crei necesarias pero me sigue saliendo ese error.
Alguna idea?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar