Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

AIDE, Posix et les fichiers 64 bits.

4 réponses
Avatar
Hercule POIROT
Bonjour,

En supposant que je développe et exécute un programme C sur une
plateforme 32 bits :

Quelqu'un pourrait-il m'écrire le programme C le plus simple et le plus
portable possible qui, en s'appuyant sur le standard POSIX d'accès au
fichiers [ dont la longueur est codée sur ] 64 bits, permet d'afficher à
l'écran la taille du fichier dont le nom est fourni en argument unique
au programme, et de permuter le premier KiO et le dernier KiO de données
de ce fichier si celui-ci a une taille d'au moins 2 KiO ?

Sans blague, c'est très important.

Si mon environnement de développement/exécution est Debian GNU Linux
stable 3.1 (sarge) avec Linux 2.6.15+ sur IA-32 (686 par exemple),
dois-je incorporer des particularités à mon programme ?

Dois-je invoquer gcc avec le paramètre -D_FILE_OFFSET_BITS=64 ?
Ou dois-je définir une macro ainsi : #define _FILE_OFFSET_BITS 64
et avant quelle(s) inclusion(s) d'entête(s) placer cette macro ?

Ce programme source en C sera-t-il prêt à l'emploi pour les
environnements mingw ou cygwin ?

Cordialement,
Hercule POIROT.

4 réponses

Avatar
Harpo
Hercule POIROT wrote:


Quelqu'un pourrait-il m'écrire le programme C


Oui, toi, enfin je l'espère.

--
http://patrick.davalan.free.fr/

Avatar
Targeur fou

Bonjour,


Bonjour,


En supposant que je développe et exécute un programme C sur une
plateforme 32 bits :

Quelqu'un pourrait-il m'écrire le programme C le plus simple et le plus


Non, tu vas l'écrire.

portable possible qui, en s'appuyant sur le standard POSIX d'accès au
fichiers [ dont la longueur est codée sur ] 64 bits, permet d'afficher à
l'écran la taille du fichier dont le nom est fourni en argument unique
au programme,


<HS>
Voir fonctions stat()/fstat() et membre st_size de la structure stat.
</HS>

et de permuter le premier KiO et le dernier KiO de données
de ce fichier si celui-ci a une taille d'au moins 2 KiO ?


Voir stdio, faisable en C standard.

Sans blague, c'est très important.


Pourquoi ?

Si mon environnement de développement/exécution est Debian GNU Linux
stable 3.1 (sarge) avec Linux 2.6.15+ sur IA-32 (686 par exemple),
dois-je incorporer des particularités à mon programme ?


Il te faut ce qu'il faut dans le source et il te faut compiler avec les
bonnes options. Plus exactement, tu utiliseras certainement des
fonctions qui ne font pas partie de la bibliothèque standard du
langage C, comme stat(), donc il te faut réfléchir à propos de ce
qu'il faut ajouter (Quel entête ? Quelle bibliothèque supplémentaire
? Comment indiquer tout cela à mon compilateur ? ec...).

Dois-je invoquer gcc avec le paramètre -D_FILE_OFFSET_BITSd ?
Ou dois-je définir une macro ainsi : #define _FILE_OFFSET_BITS 64
et avant quelle(s) inclusion(s) d'entête(s) placer cette macro ?

Ce programme source en C sera-t-il prêt à l'emploi pour les
environnements mingw ou cygwin ?



Peut-être.

A+
Regis

Avatar
Antoine Leca
En news:44567abc$0$20148$, Hercule POIROT va
escriure:
En supposant que je développe et exécute un programme C sur une
plateforme 32 bits :

Quelqu'un pourrait-il m'écrire le programme C le plus simple et le
plus portable possible qui, en s'appuyant sur le standard POSIX
d'accès au fichiers [ dont la longueur est codée sur ] 64 bits,


Ouh là là. On en est déjà à deux suppositions sur les tailles de certaines
quantités... Résultat, il est probable que la portabilité ne sera pas la
plus grande possible, il va falloir se reporter sur un sous-ensemble de la
norme C (et pour autant, aller sur le groupe correspondant pour avoir une
solution toute faite).

Par exemple, puisque tu as parlé de*s* norme*s* Posix, tu pourrais peut-être
essayer sur le groupe concerné ?


permet d'afficher à l'écran la taille du fichier


Définit « taille de fichier ». Longueur des données ? Espace de stockage
alloué ? utilisé ? Autre chose encore ? Et l'unité ?

dont le nom est
fourni en argument unique au programme, et de permuter le premier KiO
et le dernier KiO de données de ce fichier si celui-ci a une taille
d'au moins 2 KiO ?


(Comme il y a un piège dans l'énoncé, j'aide pour celui-là):

Regarde assert(!setvbuf(f,buf,_IOFBF,8192/CHAR_BIT));


Si mon environnement de développement/exécution est Debian GNU Linux
stable 3.1 (sarge) avec Linux 2.6.15+ sur IA-32 (686 par exemple),
dois-je incorporer des particularités à mon programme ?


Et poser la question sur un groupe Linux ?

(En gros, il y a deux manières de faire, l'une est théoriquement plus
portable que l'autre, l'autre était en pratique plus portable que l'une. Je
n'ai aucune idée de comment cela s'articule dans ton cas particulier. Qui,
en plus, ne précise pas quel est ton environnement de développement...
Et pour moi, sarge=2.4.27, éventuellement 2.6.8.1.)


Ce programme source en C sera-t-il prêt à l'emploi pour les
environnements mingw ou cygwin ?


Tel quel, non. Il faut préciser des contraintes (versions, par exemple) pour
traiter correctement des fichiers de plus de 2/4Go, tant avec cygwin qu'avec
mingw, ou quelqu'autre environnement que ce soit d'ailleurs.


Antoine

Avatar
Targeur fou


Bonjour,


Bonjour,

[coupé]



et de permuter le premier KiO et le dernier KiO de données
de ce fichier si celui-ci a une taille d'au moins 2 KiO ?


Voir stdio, faisable en C standard.


Euh, non, pas avec des fichiers 64 bits en fait, mais tu devrais
trouver des fonctions de noms proches dans d'autres API avec 64 comme
suffixe ( fopen64() ).

A+
Regis