2010-01-13 11 views
9

Me pregunto si puede: bloquear solo una línea o un solo carácter en un archivo en Linux y el resto del archivo debe permanecer accesible para otros procesos. Recibí una tarea relacionada con la simulación de transacciones en un archivo con c/C++ en Linux. Por favor, dame una respuesta y si esta respuesta es sí, dame algunos enlaces desde donde podría echar un vistazo para hacer esta tarea.Bloquear archivos en Linux con c/C++

Gracias, Madicemickael

+0

desde la posición x hasta la posición y (x

+1

A menos que sea el OP, no etiquete las preguntas como "tarea", ya que hacerlo solo puede ser una opinión de su parte. Si cree que la pregunta debe cerrarse, simplemente vote para cerrarla. –

Respuesta

3

lockf(3) puede aplicar un bloqueo a una sección de un archivo.

12

fcntl() es la única API para elegir, ya que es la menos rota y es POSIX. Es el único que funciona en NFS. Dicho esto, también es un desastre completo, ya que los bloqueos están sujetos a procesos, no a descriptores de archivos. Eso significa que si bloquea un archivo y luego otro hilo o alguna función de biblioteca lo bloquea/desbloquea, su bloqueo también se romperá. Además, no puede usar bloqueos de sistema de archivos para proteger dos subprocesos del mismo proceso para interferir entre sí. Además, no debe usar bloqueos de archivos en archivos a los que puedan acceder más de un usuario, porque eso permite a los usuarios congelar los procesos de los demás.

En resumen: el bloqueo de archivos en Unix crea más problemas de los que resuelve. Antes de usarlo, debe ser Realmente, asegúrese de comprender completamente la semántica.

+1

Aunque los bloqueos de archivos están vinculados a los procesos, puede usar un mutex en su aplicación con hebras para asegurarse de que un hilo no libera un bloqueo creado por otro. –