O_LARGEFILE est nécessaire juste pour écrire un fichier volumineux?
-
04-10-2019 - |
Question
Le drapeau O_LARGEFILE
nécessaire si tout ce que je veux faire est d'écrire un fichier volumineux (O_WRONLY
) ou d'y ajouter un gros fichier (O_APPEND | O_WRONLY
)?
A partir d'un fil que je lis intitulé « Impossible écriture> fichier d'index 2gb » sur la liste de diffusion CLucene-dev, il semble que O_LARGEFILE
pourrait être nécessaire pour écrire des fichiers volumineux, mais les participants à cette discussion utilisent O_RDWR
, pas O_WRONLY
, donc je ne suis pas sûr.
La solution
O_LARGEFILE
ne doit jamais être utilisé directement par les applications. Il est à utiliser en interne par la version 64 bits offset compatible open
dans libc quand il fait le syscall au noyau (Linux, ou peut-être un autre noyau avec ce décalage de 64-bits en mode-est-un-deuxième classe non-sens citoyen). Assurez-vous de toujours inclure -D_FILE_OFFSET_BITS=64
dans votre CFLAGS
et vous ne serez jamais à vous soucier de quoi que ce soit.
Autres conseils
IIRC si vous faites
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
avant tous les autres que vous ne comprend pas besoin de passer ce drapeau.