È O_LARGEFILE necessaria solo per scrivere un file di grandi dimensioni?
-
04-10-2019 - |
Domanda
E 'la bandiera O_LARGEFILE
necessaria se tutto quello che voglio fare è scrivere un file di grandi dimensioni (O_WRONLY
) o aggiungere a un file di grandi dimensioni (O_APPEND | O_WRONLY
)?
Da un filo che ho letto dal titolo " Impossibile scrittura> 2GB file indice " sulla mailing list CLucene-dev, sembra che O_LARGEFILE
potrebbe essere necessario per scrivere i file di grandi dimensioni, ma i partecipanti a quella discussione si utilizza O_RDWR
, non O_WRONLY
, quindi non sono sicuro.
Soluzione
O_LARGEFILE
non dovrebbe mai essere utilizzato direttamente dalle applicazioni. E 'per essere utilizzato internamente da compatibile con la versione a 64 bit-compensare la di open
in libc quando fa la chiamata di sistema al kernel (Linux, o forse un altro kernel con questo 64-bit-offset-mode-is-a-di seconda nonsense classe cittadino). Basta fare in modo di includere sempre -D_FILE_OFFSET_BITS=64
nel vostro CFLAGS
e non dovrete mai preoccuparvi di nulla.
Altri suggerimenti
IIRC se si fa
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
prima di tutti gli altri include non c'è bisogno di passare questo flag.