Hello, I am not quite sure if this is a Windows bug. The API you are using is actually that one from msvcrt.dll for large/none-large file accesses. The most common issue showing this behavior is the TEXT vs. BINARY file open mode on Windows C-runtime. New-lines might be expanded to carriage-return + new-line, which can change possitions easily. To avoid that use on file open the additional flag O_BINARY.
Regards, and I hope this will help you, Kai 2017-10-19 10:06 GMT+02:00 Etienne Sandré-Chardonnal <[email protected]>: > Dear all, > > I have a program which reads concurrently multiple files using the C I/O > library. I have encountered a problem, _ftelli64 randomly reports an > incorrect position, with a mismatch of a few bytes. The bug disappears if > any of these changes is done: > > - ftell is used instead of _ftelli64 (but no more large file support) > - std::ifstream is used instead of C functions (but I need _wfopen for > unicode file names) > - files are not read concurrently (reading threads set to 1) > > I have reproduced this in the attached MCVE. It does create 8 files > approximately 3MB large, and reads them concurrently in 8 threads by 65544 > byte blocks. It compares the value returned by fread() and the difference > between _ftelli64 calls before and after fread(). It prints the mismatches. > > Typical output is : > > Error 2.dat / ftell before 3080570 / fread returned 65544 / ftell after > 3146112 / mismatch -2 > > Error 6.dat / ftell before 3080569 / fread returned 65544 / ftell after > 3146112 / mismatch -1 > > Error 4.dat / ftell before 65544 / fread returned 65544 / ftell after > 131089 / mismatch 1 > > Error 5.dat / ftell before 0 / fread returned 65544 / ftell after 65543 / > mismatch -1 > > Error 5.dat / ftell before 65543 / fread returned 65544 / ftell after > 131088 / mismatch 1 > > Error 4.dat / ftell before 2162953 / fread returned 65544 / ftell after > 2228498 / mismatch 1 > > Error 5.dat / ftell before 2162952 / fread returned 65544 / ftell after > 2228497 / mismatch 1 > > Error 4.dat / ftell before 3080570 / fread returned 65544 / ftell after > 3146112 / mismatch -2 > > Error 5.dat / ftell before 3080569 / fread returned 65544 / ftell after > 3146112 / mismatch -1 > > > Is this a bug from windows or from MinGW C library? > > Thanks! > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Mingw-w64-public mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
