Puis-je rechercher une position supérieure à 2 Go en C en utilisant la bibliothèque standard?

Je crée un programme qui lit les images de disque en C. J’essaie de rendre quelque chose de portable, je ne veux donc pas utiliser trop de bibliothèques spécifiques à un système d’exploitation. Je suis conscient du fait que de nombreuses images de disque sont de très gros fichiers, mais je ne sais pas comment prendre en charge ces fichiers.

J’ai lu sur fseek et il semble utiliser un long int qui n’est pas garanti pour supporter des valeurs supérieures à 2 31 -1. fsetpos semble supporter une valeur plus grande avec fpos_t mais une position absolue ne peut pas être spécifiée. J’ai également fseek à utiliser plusieurs recherches relatives avec fseek mais je ne sais pas si cela est portable.

Comment puis-je prendre en charge de manière portative la prise en charge de gros fichiers en C?

    Il n’y a pas de moyen portable.

    Sous Linux, il existe fseeko() et ftello() , pair (besoin de quelques définitions, vérifiez ftello() ).

    Sous Windows, je pense que vous devez utiliser _fseeki64() et _ftelli64()

    #ifdef est ton ami

    pread() fonctionne sur toutes les plateformes compatibles POSIX (OS X, Linux, BSD, etc.). Il manque sous Windows, mais il y a beaucoup de choses standard que Windows se trompe; ce ne sera pas la seule chose dans votre base de code qui nécessite un cas particulier de Windows.

    Vous ne pouvez pas le faire avec le standard C. Même avec des recherches relatives, certaines architectures ne le permettent pas.

    Une approche serait de vérifier la plate-forme au moment de la compilation. Vous pouvez simplement vérifier la valeur de LONG_MAX et émettre une erreur de compilation si elle n’est pas assez grande. Mais même cela ne garantit pas que le système de fichiers sous-jacent supporte les fichiers de plus de 2 ou 4 Go.

    Un meilleur moyen consiste à utiliser les macros pré-processeur fournies par votre compilateur pour vérifier le système d’exploitation pour lequel votre code est compilé et pour écrire un système spécifique. Le système d’exploitation doit fournir un moyen de vérifier que le système de fichiers prend en charge les fichiers supérieurs à 2 Go ou 4 Go.