¿Se necesita O_LARGEFILE solo para escribir un archivo grande?

2 minutos de lectura

avatar de usuario
daniel trebbin

Es el O_LARGEFILE indicador necesario si todo lo que quiero hacer es escribir un archivo grande (O_WRONLY) o agregar a un archivo grande (O_APPEND | O_WRONLY)?

De un hilo que leí titulado “No se puede escribir un archivo de índice de más de 2 gb” en la lista de correo de CLucene-dev, parece que O_LARGEFILE podría ser necesario para escribir archivos grandes, pero los participantes en esa discusión están usando O_RDWRno O_WRONLYasí que no estoy seguro.

O_LARGEFILE nunca debe ser utilizado directamente por las aplicaciones. Debe ser utilizado internamente por la versión compatible con desplazamiento de 64 bits de open en libc cuando hace la llamada del sistema al kernel (Linux, o posiblemente otro kernel con esta tontería de 64-bit-offset-mode-is-a-second-class-citizen). Solo asegúrate de incluir siempre -D_FILE_OFFSET_BITS=64 en tus CFLAGS y nunca tendrás que preocuparte por nada.

  • ¿Tiene alguna fuente para que O_LARGEFILE no deba usarse?

    – dmeister

    12 de enero de 2012 a las 12:20

  • La mejor fuente es el hecho de que grepping POSIX arroja cero resultados.

    – R.. GitHub DEJA DE AYUDAR A ICE

    12 de enero de 2012 a las 13:38

  • Entonces, ¿quieres decir que O_LARGEFILE es algo así como un límite? Debe ser alguna razón por la que existe esta bandera.

    – kirugan

    29 de junio de 2013 a las 5:41

  • En los sistemas de 32 bits, la versión de open usado con -D_FILE_OFFSET_BITS=64 pasa O_LARGEFILE al núcleo de forma transparente. La versión utilizada con 32 bits off_t no es. Esto, a su vez, determina “el desplazamiento máximo establecido en la descripción del archivo abierto”, en el lenguaje de POSIX, lo que hace que varias funciones informen errores cuando darían como resultado un desplazamiento de archivo que no se puede representar en el formato de 32 bits. off_t. El máximo está asociado con la descripción del archivo abierto en lugar del proceso, ya que las descripciones del archivo abierto se pueden compartir entre procesos.

    – R.. GitHub DEJA DE AYUDAR A ICE

    29 de junio de 2013 a las 5:59

  • En cualquier caso, no hay absolutamente ninguna razón para hurgar en O_LARGEFILE tú mismo. Si está utilizando 64 bits off_t en un sistema de 32 bits, se configurará automáticamente para usted, y de lo contrario (en sistemas de 64 bits, o en sistemas de 32 bits con 32 bits off_t), no debe establecerse.

    – R.. GitHub DEJA DE AYUDAR A ICE

    29 de junio de 2013 a las 6:00

avatar de usuario
codimanix

IIRC si lo haces

#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64

antes de que todos los demás incluyan, no necesita pasar esta bandera.

ver adicionalmente

  • _LARGEFILE_SOURCE no es necesario, solo _FILE_OFFSET_BITS.

    – R.. GitHub DEJA DE AYUDAR A ICE

    10 de agosto de 2011 a las 17:49

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad