Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2602 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  fopen, fseek, ftell, ... en mode 64 bits

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fopen, fseek, ftell, ... en mode 64 bits

n°410006
KSauzeRK
Posté le 28-05-2003 à 10:20:09  profilanswer
 

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
mood
Publicité
Posté le 28-05-2003 à 10:20:09  profilanswer
 

n°410014
Taz
bisounours-codeur
Posté le 28-05-2003 à 10:23:21  profilanswer
 

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)

n°410016
Taz
bisounours-codeur
Posté le 28-05-2003 à 10:23:47  profilanswer
 

KSauzeRK a écrit :


Edit : le compilateur, ca peut être utile : cc  

qui est un frontend à gcc?

n°410120
KSauzeRK
Posté le 28-05-2003 à 10:57:18  profilanswer
 

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 :D).
 
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.)


Message édité par KSauzeRK le 28-05-2003 à 10:57:46
n°410133
Taz
bisounours-codeur
Posté le 28-05-2003 à 11:02:52  profilanswer
 

NAME
       fseeko, ftello - seek to or report file position
 
SYNOPSIS
       #include <stdio.h>
 
       int fseeko(FILE *stream, off_t offset, int whence);
 
       off_t ftello(FILE *stream);
 
DESCRIPTION
       The fseeko() and ftello() functions are identical to fseek() and ftell() (see fseek(3)), respectively, except that
       the offset argument of fseeko() and the return value of ftello() is of type off_t instead of long.
 
       On many architectures both off_t and long are 32-bit types, but compilation with
              #define _FILE_OFFSET_BITS 64
       will turn off_t into a 64-bit type.
 
NOTES
       These functions are found on SysV-like systems.  They are not present in libc4, libc5,  glibc  2.0  but  available
       since glibc 2.1.
 
CONFORMING TO
       The fseeko and ftello functions conform to SUSv2.

 
 
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


Message édité par Taz le 28-05-2003 à 11:05:16
n°410216
KSauzeRK
Posté le 28-05-2003 à 11:38:55  profilanswer
 

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.

n°410219
Taz
bisounours-codeur
Posté le 28-05-2003 à 11:40:46  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  fopen, fseek, ftell, ... en mode 64 bits

 

Sujets relatifs
Entiers longs (64 bits), ça existe pas ???algo de conversion d image 16 bits en 24 bits
[C / C++] A propos de fopen..[ PHP ] Probleme de Fopen et HEXA
existence de ORACLE 9i 32 bits pour HP UX 11[PHP] help fonction fopen,...etc...
Variable 32 bits stoquée dans 2 varialbes 16 bits ?Probleme avec fseek
Erreur d'arrondi différentes en mode Debug ou ReleaseLangages essentiels, à la "mode"?
Plus de sujets relatifs à : fopen, fseek, ftell, ... en mode 64 bits


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)