Мне нужно написать код 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.