delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/01/24/13:11:19

From: kuzminsk AT taussky DOT cs DOT colorado DOT edu (Sebastian Kuzminsky)
Subject: unexpected behavior of read() under win95
24 Jan 1998 13:11:19 -0800 :
Message-ID: <199801230406.VAA17577.cygnus.gnu-win32@taussky.cs.colorado.edu>
To: gnu-win32 AT cygnus DOT com

   Hi, i'm new to the gnu-win32 scene.  (I think it's a great idea,
i'll take vi and gcc over Microsoft Visual This or That ++ anyday.
Thanks a lot, developers!)


   Anyway, i'm having a problem with read().  I've included a program
which (on my system) demonstrates the problem.  I'm using version 'b17.1'
of win32gcc.  I'm working under Linux and cross-compiling for a win95 box.
The program works under Linux when compiled with gcc, exact same flags.
Here's the program:

----- begin include simptest.c -----


#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

#include <sys/stat.h>
#include <sys/types.h>




int main(int argc, char *argv[]) { 
   int file_fd;
   int n;
   char buffer[100];

   int total_read = 0;


   if (argc < 2) {
      printf("usage:  simptest <filename>\n");
      exit(1);
   }

   file_fd = open(argv[1], O_RDONLY);
   if (file_fd == -1) {
      fprintf(stderr, "cannot open %s:  ", argv[1]);
      exit(1);
   }


   do {
      n = read(file_fd, buffer, 50);
      if (n == -1) {
	 return -1;
      }

      if (n == 0) {
	 printf("end of file?\n");
	 printf("read %d bytes total\n", total_read);
	 return 0;
      }

      if (n != 50) {
	 fprintf(stderr, "read %d bytes, expected 50\n", n);
      } else {
         printf("read 50, ok\n");
      }

      total_read += n;
   } while(1);


   exit(0);
}


----- end include simptest.c -----


   When run under Linux, this program reads 50 byte chunks of the named
file, until there's less than 50 bytes left, then it reads whatever's
left and then quits.  This is what i would call the expected behavior.


   When run under win95, however, it behaves unexpectedly.  Calls to
read() often read less than 50 bytes (which is surprising and annoying but
legal), and sometimes read 0 bytes (signifying EOF, which is not legal).
This happens both on binary and text files.


   Any idea what's up here?  I guess i should try it using the latest
version.




   Also, i cant link my program static.  Even if i give the -static flag
at the link step i still need cygwin.dll to run my program under win95.




Sebastian

-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019