Was ist die maximale Dateigröße in 64-Bit-Maschine

Ich bin neu in der 64-Bit-Architektur. Können Sie mir sagen, welche MAX-Dateigröße von der Dateizuordnung auf einem 64-Bit-Linux-Computer unterstützt wird? Ich möchte mehr als 20 GB Dateien per Dateizuordnung öffnen. Steht diese zur Verfügung?

Ich schreibe einen Beispielcode. Aber es verursachtBusfehler Wenn ich den Wert des Zeigers in GBSIZE-Offset erhalte:

unsigned char* pCur = pBegin + GBSIZE;
//pBegin is the pointer returned by mmap
printf("%c",*pCur); 

Übrigens,printf("%c",*pBegin ); funktioniert gut. und meine Adressgrößen: 38 Bit physisch, 48 Bit virtuell

Hier ist der vollständige Code:

#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;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage