2010-04-18 12 views
6

que tienen una aplicación multiproceso que se está abriendo y leyendo el mismo archivo (no escrito). Estoy abriendo un descriptor de archivo diferente para cada hilo (pero todos apuntan al mismo archivo). Cada hilo lee el archivo y puede cerrarlo y abrirlo nuevamente si se alcanza EOF. ¿Esta bien? Si realizo fclose() en un descriptor de archivo ¿afecta a los demás descriptores de archivo que apuntan al mismo archivo?descriptores de archivos múltiples a un mismo archivo, C

Respuesta

3

Eso está bien. Puede abrir todas las veces que desee el mismo archivo y cada descriptor de archivo será independiente el uno del otro.

0

Eso debería funcionar bien, siempre que cada hilo tiene su propio identificador de archivo. Ya que mencionas uso de fclose(), que sugiere que también está usando fopen() en cada hilo y cada hilo sólo afecta a su propia FILE * variable.

¿Hay algún problema?

+0

Básicamente, he creado una matriz de 2-dim de punteros de archivos (ya que cada hilo se lee, por ejemplo, archivos X), para un total de hilos y. entonces mi array FILE * es array [y] [x]. Para un hilo dado i, abro un archivo a través de fopen (array [i] [0]) por ejemplo (para el archivo 0). Luego leo (fread) el archivo (aunque no todo de una vez) y hago otras tareas (sin embargo, no se produce la escritura de archivos). Durante una lectura, si se alcanza EOF, cierro y luego vuelvo a disparar. Mi preocupación era que, cuando FO fclose y fopen, podría afectar en modo alguno los otros punteros archivo * de los otros hilos que apuntan al mismo archivo realicé f Cerrar O – Gigi

+0

Asumiendo que su 'fopen()' es un error tipográfico (debe ser 'array [i] [0] = fopen' ...), entonces sí, eso funcionará bien. Siempre que cada hilo no manipule datos pertenecientes a otros hilos. – wallyk

+0

Gracias. Sí, todos los hilos están haciendo para estos archivos fopen(), fread() y fclose(). – Gigi

3

Para los sistemas Linux no necesita múltiples descriptores de fichero para hacer esto. Puede compartir un solo descriptor de archivo y usar pread para realizar atómicamente una operación de búsqueda/lectura sin modificar el descriptor de archivo.

+0

'pread' es POSIX, por lo que no está limitado a Linux. –

Cuestiones relacionadas