title: Reading a large file using C (greater than 4GB) using read function, causing problems
body: <p>I have to write C code for reading large files. The code is below:</p>
  
  <pre><code>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 &lt; 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);
  }
  </code></pre>
  
  <p>The issue I am facing here is that as long as the argument passed (size parameter) is less than 264000000 bytes, it seems to be able to read. I am getting the increasing sizes of the chunk variable with each cycle.</p>
  
  <p>When I pass 264000000 bytes or more, the read fails, i.e.: according to the check used read returns -1.</p>
  
  <p>Can anyone point me to why this is happening? I am compiling using cc in normal mode, not using DD64.</p>