print and output

From: Adam P. Jenkins (ajenkins@cs.umass.edu)
Date: Wed Jul 02 1997 - 20:43:10 MET DST


Date: Wed, 2 Jul 1997 14:43:10 -0400
Message-Id: <199707021843.OAA00394@dwarin.oit.umass.edu>
From: "Adam P. Jenkins" <ajenkins@cs.umass.edu>
To: caml-list@inria.fr
Subject: print and output
In-Reply-To: <v01530501afde7af99a9d@[129.88.38.40]>

Michel Levy writes:
> Bonjour,
>
> Quand j'ecris (en Ocaml) le "programme" suivant :
> print_string ">>"; read_int ();;
> l'impression a lieu apres la lecture, ce qui me surprend, car il est dit
> val read_int : unit -> int
> Flush standart output then ...
>
> Quand j'ecris le "programme" suivant :
> output_string ">>"; read_int ();;
> l'impression a lieu avant la lecture, ce qui est heureux.
>
> Pourquoi cette diffence, car je pensais que :
> print_string = output_string stdout
>
> Hi
>
> When I write (in OCAML) the following program :
> print_string ">>"; read_int ();;
> the reading takes place before the printing, what surprises me.
>
> On the contrary, when I write :
> output_string ">>"; read_int ();;
> the printing takes place before the reading, what is better.
>
> Why this difference, whereas I thought that :
> print_string = output_string stdout
>
>
> Michel Levy
> D106 - Laboratoire LSR
> B.P.72 - 38402 SAINT MARTIN D'HERES CEDEX - France
> Tel : 0476827246
> e.mail : Michel.Levy@imag.fr
>
>
>
>

That is kind of strange, since print_string is implemented with
output_string. Maybe it just had to do with the order in which you
executed the commands, i.e. when the stdout buffer became full.

> cd /usr/local/lib/ocaml
> grep print_string pervasives.ml
let print_string s = output_string stdout s

To make the printing happen first in either case, you can add
"flush stdout;".

        print_string ">>"; flush stdout; read_int ();;

Adam



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:11 MET