Je suis novice en architecture 64 bits. Pourriez-vous me dire quelle est la taille de fichier MAX supportée par le mappage de fichiers dans une machine linux 64 bits. Je veux ouvrir plus de 20 Go de fichiers par mappage de fichiers, est-il disponible?Quelle est la taille de mappage de fichier maximale dans la machine 64 bits
J'écris un exemple de code. Mais il provoque Erreur de bus quand je reçois la valeur du pointeur en GBSIZE offset:
unsigned char* pCur = pBegin + GBSIZE;
//pBegin is the pointer returned by mmap
printf("%c",*pCur);
BTW, printf("%c",*pBegin);
fonctionne très bien. et mes tailles d'adresse: 38 bits de physique, 48 bits virtuels
Voici le code complet:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
//#define FILEPATH "smallfile"
#define FILEPATH "bigfile"
#define GBSIZE (1024L*1024L*1024L)
#define TBSIZE (1024L*GBSIZE)
#define NUMSIZE (20L * GBSIZE)
//#define NUMSIZE (10)
#define FILESIZE (NUMINTS * sizeof(int))
int main(int argc, char *argv[])
{
int i;
int fd;
unsigned char *pBegin;
fd = open(FILEPATH, O_RDONLY);
if (fd == -1) {
perror("Error opening file for reading");
exit(EXIT_FAILURE);
}
pBegin = mmap(0, NUMSIZE, PROT_READ, MAP_SHARED, fd, 0);
if (pBegin == MAP_FAILED) {
close(fd);
perror("Error mmapping the file");
exit(EXIT_FAILURE);
}
/** ERROR happens here!!! **/
unsigned char* pCur = pBegin + GBSIZE;
printf("%c",*pCur);
if (munmap(pBegin, NUMSIZE) == -1) {
perror("Error un-mmapping the file");
}
close(fd);
return 0;
}
'pszPointer' semble être non initialisé. Vous obtiendrez de meilleures réponses si vous postez un programme complet qui démontre le problème - de préférence comme une nouvelle question. – caf
merci, j'ai fait une erreur stupide. –
Concernant l'erreur de bus, POSIX déclare: "Les références dans la plage d'adresses commençant à pa et continuant pour des octets len à des pages entières suivant la fin d'un objet doivent aboutir à la livraison d'un signal SIGBUS." http://www.opengroup.org/onlinepubs/9699919799/functions/mmap.html Si vous avez d'autres questions, postez une nouvelle question. – mark4o