/ / Dos descriptores de archivo en el mismo archivo: linux, archivo, posix, descriptor de archivo

dos descriptores de archivo en el mismo archivo - linux, file, posix, file-descriptor

Usando el posix read () write () linux calls, esgarantizo que si escribo a través de un descriptor de archivo y leo otro descriptor de archivo, de forma serial, de manera que las dos acciones se excluyan mutuamente ... mi descriptor de archivo de lectura siempre verá lo último escrito por el archivo de escritura descriptor?

Creo que este es el caso, pero quiero asegurarme y la página de manual no es muy útil en este sentido.

Respuestas

18 para la respuesta № 1

Depende de donde tengas los dos archivos.descriptores Si provienen de una llamada dup (2), entonces comparten la compensación y el estado del archivo, por lo que hacer una escritura (2) en uno afectará la posición en el otro. Si, por otro lado, provienen de dos llamadas abiertas (2) separadas, cada una tendrá su propio desplazamiento y estado de archivo.

Un descriptor de archivo es en su mayoría solo una referencia a unestructura de archivos del kernel, y es la estructura del kernel la que contiene la mayor parte del estado. Cuando abre (2) un archivo, obtiene una nueva estructura de archivo de kernel y un nuevo descriptor de archivo que se refiere a él. Cuando duplica (2) un descriptor de archivo (o pasa un descriptor de archivo a través de sendmsg), obtiene una nueva referencia a la misma estructura de archivo del kernel.


1 para la respuesta № 2

Esto está garantizado si ambos se refieren a la misma descripción del archivo, es decir, los obtuvo de "dup" o "dup2" (o se heredó a través de fork())

Después de un exitoso regreso de uno de estasSistema de llamadas, lo antiguo y lo nuevo. se pueden usar descriptores de archivo indistintamente Se refieren a la misma descripción de archivo abierto (ver abrir (2)) y por lo tanto compartir el desplazamiento de archivos y banderas de estado del archivo; por ejemplo, si el desplazamiento del archivo se modifica utilizando lseek (2) en uno de los descriptores, el desplazamiento también se cambia para el otro.


0 para la respuesta № 3

cuando usas dup() o dup2() o fork() , la tabla de archivos es compartida por ambos descriptores de archivos. así que si usted write algo de un descriptor de archivo, y otra vez write algo a través de otro descriptor de archivo, entonces se anexa no se anula.

pero si dos procesos independientes abren un archivo, entonces los datos escritos por ambos procesos pueden mezclarse.