< #include <sys/types.h>
< #include <sys/stat.h>
< #include <fcntl.h>
-<
+<
+< #ifdef __MINGW32__
+< #define sleep _sleep
+< #endif
+<
< int main() {
-< char buff[2048];
-< int got;
-< int in;
+< char buff[2048];
+< char* p;
+< int got;
+< int in;
+< int w;
+< int tgot = 0;
+<
+< sleep(1);
+<
+< if((in = open("tmp_fich",O_RDONLY|O_CREAT)) == -1){
+< perror("Cannot open tmp_fich");
+< exit(1);
+< }
+<
+< while (1) {
+< if((got = read(in,&buff,2048)) == -1)
+< perror("Error while reading");
+< else if(got == 0 && tgot != 0)
+< break; /* EOF */
+<
+< if(!got)
+< continue;
+<
+< p = buff;
+<
+< tgot += got;
+<
+< while(got) {
+< if((w = write(1, p , got)) < 0) {
+< perror("Error while writing");
+< exit(1);
+< }
+<
+< p += w;
+< got -= w;
+< }
+< }
<
-< sleep(1);
-< in = open("tmp_fich",O_RDONLY|O_CREAT);
-< if (in == -1) {
-< perror("Cannot open tmp_fich: ");
-< exit(1);
-< }
-< while ((got = read(in,&buff,2048))>0) {
-< int w = write(1,&buff,got);
-< if (w<0) {
-< perror("Error while writing:");
-< exit(1);
-< }
-< }
-< if (got < 0) {
-< perror("Error while reading:");
-< exit(1);
-< }
-< return 0;
+< return 0;
< }
$ cat > delayed_cat.c