2010-05-22 17 views
9

L'indicateur O_LARGEFILE est-il nécessaire si tout ce que je veux faire est d'écrire un gros fichier (O_WRONLY) ou d'ajouter un fichier volumineux (O_APPEND | O_WRONLY)?Est-ce que O_LARGEFILE est nécessaire pour écrire un gros fichier?

d'un fil que je lis intitulé « Cannot write >2gb index file » 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.

Répondre

10

O_LARGEFILE ne doit jamais être utilisé directement par les applications. Il doit être utilisé en interne par la version compatible avec le décalage 64 bits de open dans libc quand il fait le syscall au noyau (Linux, ou peut-être un autre noyau avec ce mode offset-64-bit-is-a-second- absurdité de classe-citoyen). Assurez-vous de toujours inclure -D_FILE_OFFSET_BITS=64 dans votre CFLAGS et vous n'aurez jamais à vous soucier de quoi que ce soit.

+0

Avez-vous des sources pour lesquelles O_LARGEFILE ne devrait pas être utilisé? – dmeister

+0

La meilleure source est le fait que greber POSIX pour cela ne donne aucun résultat. –

+0

Donc, vous voulez dire, O_LARGEFILE est quelque chose comme un bouchon? Ce doit être une raison pour laquelle ce drapeau existe. – kirugan

10

IIRC si vous

#define _LARGEFILE_SOURCE 
#define _FILE_OFFSET_BITS 64 

avant tous les autres que vous ne comprend pas besoin de passer ce drapeau.

additionally see

+5

'_LARGEFILE_SOURCE' n'est pas nécessaire, seulement' _FILE_OFFSET_BITS'. –