Чтение большого файла с использованием C (размером более 4 ГБ )с использованием функции чтения, что вызывает проблемы

Мне нужно написать код C для чтения больших файлов. Код ниже:

int read_from_file_open(char *filename,long size)
{
    long read1=0;
    int result=1;
    int fd;
    int check=0;
    long *buffer=(long*) malloc(size * sizeof(int));
    fd = open(filename, O_RDONLY|O_LARGEFILE);
    if (fd == -1)
    {
       printf("\nFile Open Unsuccessful\n");
       exit (0);;
    }
    long chunk=0;
    lseek(fd,0,SEEK_SET);
    printf("\nCurrent Position%d\n",lseek(fd,size,SEEK_SET));
    while ( chunk < size )
    {
        printf ("the size of chunk read is  %d\n",chunk);
        if ( read(fd,buffer,1048576) == -1 )
        {
            result=0;
        }
        if (result == 0)
        {
            printf("\nRead Unsuccessful\n");
            close(fd);
            return(result);
        }

        chunk=chunk+1048576;
        lseek(fd,chunk,SEEK_SET);
        free(buffer);
    }

    printf("\nRead Successful\n");

    close(fd);
    return(result);
}

Проблема, с которой я сталкиваюсь здесь, заключается в том, что до тех пор, пока переданный аргумент (размер параметра )меньше 264000000 байт, он, кажется, может читать. Я получаю увеличивающиеся размеры переменной куска с каждым циклом.

Когда я передаю 264000000 байт и более, чтение завершается неудачно, т.е. :согласно используемой проверке чтение возвращает -1.

Может ли кто-нибудь указать мне, почему это происходит? Я компилирую с помощью cc в обычном режиме, не используя DD64.

7
задан Rüdiger Hanke 3 August 2012 в 21:32
поделиться