2010-05-22 16 views
9

¿Es necesario el indicador O_LARGEFILE si todo lo que quiero hacer es escribir un archivo grande (O_WRONLY) o anexar a un archivo grande (O_APPEND | O_WRONLY)?¿Se necesita O_LARGEFILE solo para escribir un archivo grande?

De un hilo que he leído titulado "Cannot write >2gb index file" en la lista de correo CLucene-dev, parece que O_LARGEFILE podrían ser necesarios para escribir archivos de gran tamaño, pero los participantes en la discusión están utilizando O_RDWR, no O_WRONLY, así que no estoy Por supuesto.

Respuesta

10

O_LARGEFILE nunca debe ser usado directamente por las aplicaciones. Debe ser utilizado internamente por la versión compatible con el desplazamiento de 64 bits de open en libc cuando realiza el syscall en el kernel (Linux, o posiblemente otro kernel con este modo de desplazamiento de 64 bits es un segundo) tonterías de clase-ciudadano). Solo asegúrese de incluir siempre -D_FILE_OFFSET_BITS=64 en su CFLAGS y nunca tendrá que preocuparse por nada.

+0

¿Tiene alguna fuente para que O_LARGEFILE no se use? – dmeister

+0

La mejor fuente es el hecho de que al agregar POSIX para obtener resultados cero. –

+0

¿Quiere decir que O_LARGEFILE es algo así como un gorro? Debe ser una razón por la cual existe esta bandera. – kirugan

10

IIRC si lo hace

#define _LARGEFILE_SOURCE 
#define _FILE_OFFSET_BITS 64 

antes de que todo otro incluye que no es necesario pasar esta bandera.

additionally see

+5

'_LARGEFILE_SOURCE' no es necesario, solo' _FILE_OFFSET_BITS'. –

Cuestiones relacionadas