fopen, fseek, ftell, ... en mode 64 bits - C++ - Programmation
Marsh Posté le 28-05-2003 à 10:23:21
man ftello
man fseeko
pour le reste, rien n'existe (on a pas tous les jours besoin d'ecrire/lire 2**32 octets d'un seul coup)
Marsh Posté le 28-05-2003 à 10:23:47
ReplyMarsh Posté le 28-05-2003 à 10:57:18
Tout d'abord, merci pour ta (très rapide) réponse.
ok, donc j'ai besoin de remplacer uniquement ftell et fseek (et fopen aussi?) dans mon cas, je n'avais pas compris que fread64 par exemple était utilisée pour lire une grande quantité de données en un coup.
J'ai lu le man de ftell/ftello, qui m'a renvoyé sur le man de lf64, qui m'a renvoyé sur le man de lfcompile64 (vive les man ).
Bon, j'avoue ne pas avoir tout compris, mon niveau en C Unix étant plutot modeste.
D'après ce que j'ai compris, je n'ai effectivement pas besoin de changer mon code pour utiliser les fonctions adéquates (ftello, fseeko).
J'ai tenté d'utiliser les options de compilation données en exemple dans lfcompile64 :
$ c89 -D_LARGEFILE64_SOURCE \
$(getconf LFS64_CFLAGS) mon_source.c \
$(getconf LFS64_LDFLAGS) \
$(getconf LFS64_LIBS)
mais à l'exécution, mon programme me sort toujours :
Erreur ouverture de big_file en lecture
Value too large for defined data type
Je comprends pas pourquoi ca ne fonctionne pas.
(Je n'ai pas compris ton allusion a cc / frontend de gcc.)
Marsh Posté le 28-05-2003 à 11:02:52
NAME |
on a pas du lire le meme man
edit: c'est quoi ton système? quelle distribution?
perso je connais pas de fopen64, fread64... et je doute de leur existence pour les raisons evoquées précédemment
Marsh Posté le 28-05-2003 à 11:38:55
Euh...non, on effectivement on a pas les même man.
La distribution est SunOS 5.8, système : sparc.
Les fonctions fopen64, etc existent sur mon système, je ne sais pas si elles sont standard. Il n'y a pas de man pour ces fonctions, mais le man lf64 y fait référence, sur mon système encore une fois.
Bon j'ai essayé de mettre le define référencé dans ton man, ca me donne toujours la même chose.
J'ai remplacé le fopen par le fopen64, je n'ai plus d'erreur à l'ouverture de fichier. Je vais modifier le code, ca sera plus rapide, je n'ai malheureusement pas le temps de faire trop de recherches (c'est pour le boulot).
Merci pour ton aide en tout cas.
Marsh Posté le 28-05-2003 à 11:40:46
ben je connais pas du tout SunOS, je sais meme pas s'il est SUSv2
avant de tester les fonctions assure toi que ton systeme/noyau supporte les fichiers larges
Marsh Posté le 28-05-2003 à 10:20:09
Bonjour,
J'ai écris un programme en C (Unix) qui utilise des fonctions de manipulations de fichier (fopen, fseek, ftell, ...). Or ces fonctions sont dépassées sur certains fichiers dont la taille est trop importante, il faudrait utiliser les versions 64 bits des fonctions fopen64, fread64, etc, et les types associés (off64_t). Existe-t-il une option de compilation qui permet d'indiquer au compilateur d'utiliser les versions 64 bits, ou dois-je changer tous les appels de fonction dans le code?
Merci
Edit : le compilateur, ca peut être utile : cc
Message édité par KSauzeRK le 28-05-2003 à 10:21:09