I tried pretty much the same thing with the attached files (test.c generates a very big file, stat.c checks its size, cygcheck.out is available at http://blytkerchan.chez.tiscali.fr/cygcheck.out (md5 sum: 56aa8e6d575d27bf8a2b740a25e13dd0) because it's rather large and not very interesting.
Worked like a charm ! Thanx rlc On Thu, 10 Jul 2003, Corinna Vinschen wrote: > On Thu, Jul 10, 2003 at 01:35:37PM +0200, Corinna Vinschen wrote: > > On Thu, Jul 10, 2003 at 01:26:34PM +0200, Markus Sch?nhaber wrote: > > > While trying if the new support for files larger than 2GB works, I > > > created a file with a size of 4.53 GB (4,869,120,000 Bytes) using a > > > simple write in python. No problems here. But when stat-ing the file > > > with python's os.stat or by calling stat from C as done in the little > > > program below, the size of the file gets reported as 574,152,704 Bytes. > > > > The changes to 64 bit file access are not propagated automatically to > > existing applications. E.g. the current `ls' from the fileutils > > package is compiled with the old (small) stat structure which only > > has 32 bit off_t for the file size. If you want to actually use the > > new struct stat and off_t with 64 bit, you have to recompile the > > application. > > > > Sorry, but there's no way around that. > > ...and two more hints, just to clarify that a bit: > > - You must compile using the header files and libcygwin.a which has been > released together with the DLL to get the correct results. Mixing > old Cygwin headers with the new import lib or vice versa are sure > candidates for segmentation fauls. > > - Since off_t is now 64 bit and the st_size member of struct stat is a > off_t, your printf isn't correct: > > printf("Size of file <%s>: %lld", argv[1], s.st_size); > ^^^^ > > %lld is necessary. %ld matches 32 bit types on Cygwin. > > > Corinna > >
#include <assert.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #define N_GB 5 int main( void ) { int i; char buffer[1024]; struct stat stat_info; FILE *out = fopen( "out", "web" ); for ( i = 0; i < N_GB * 1024 * 1024; i++ ) { if ( fwrite( buffer, 1024, 1, out ) != 1 ) { abort( ); } } fclose( out ); stat( "out", &stat_info ); assert( ( stat_info.st_size / ( 1024 * 1024 * 1024 ) ) == N_GB ); return ( 0 ); }
#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> int main( int argc, char **argv ) { struct stat stat_info; argv++; while ( argv[0] != NULL ) { if ( stat( argv[0], &stat_info ) == 0 ) printf( "%s: %lld\n", argv[0], stat_info.st_size ); argv++; } return ( 0 ); }
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/