caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Comment rediriger les entrées/sorties   standards ?
@ 2001-05-02 12:42 Robert Longeon
  2001-05-02 14:49 ` [Caml-list] =?iso-8859-1?Q?Comment_rediriger_les_entrées/sorties_?= " Maxence Guesdon
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Robert Longeon @ 2001-05-02 12:42 UTC (permalink / raw)
  To: caml-list

Bonjour,


Je voudrait rediriger les entrées/sorties standards. Je croyais pouvoir le 
faire en tapant :

let std_out = open_out "c:\projet\entree"

mais  l'écriture se fait toujours à l'écran. De même en utilisant

output_string std_out "toto"

le fichier est toujours vide. Je vois pourquoi, ça ne peut pas marcher ... 
mais y a-t-il un moyen de rediriger les E/S standards ?



D'avance merci pour tout renseignement,




Robert Longeon.





-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list]  =?iso-8859-1?Q?Comment_rediriger_les_entrées/sorties_?=  standards ?
  2001-05-02 12:42 [Caml-list] Comment rediriger les entrées/sorties standards ? Robert Longeon
@ 2001-05-02 14:49 ` Maxence Guesdon
       [not found] ` <200105021455.f42EtjL25069@waco.inria.fr>
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Maxence Guesdon @ 2001-05-02 14:49 UTC (permalink / raw)
  To: Robert Longeon; +Cc: caml-list


> Bonjour,
> 
> Je voudrait rediriger les entrées/sorties standards. Je croyais pouvoir le
> faire en tapant :
> 
> let std_out = open_out "c:\projet\entree"
> 
> mais  l'écriture se fait toujours à l'écran. De même en utilisant
> 
> output_string std_out "toto"
> 
> le fichier est toujours vide. Je vois pourquoi, ça ne peut pas marcher ...
> mais y a-t-il un moyen de rediriger les E/S standards ?
Ceci marche sous Unix :

let _ = Unix.close Unix.stdout
let _ = open_out "tutu"

Il est très important que ton fichier ouvert par open_out soit le premier
fichier ouvert après le Unix.close, car le système se servira alors du premier
descripteur libre (0 ici, qui vient d'être libéré par la fermeture de stdout)
lors de l'ouverture de ton fichier, et c'est justement ce descripteur 0 qui est
utilisé par la suite par les opérations d'affichage sur la sortie standard.
Encore une fois, c'est sous Unix, je ne sais pas si le comportement est le même
sous Win$*%#.

--
Maxence Guesdon

-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Caml-list] Comment_rediriger_les_entrees/sorties_standards ?
       [not found] ` <200105021455.f42EtjL25069@waco.inria.fr>
@ 2001-05-02 15:20   ` Robert Longeon
  0 siblings, 0 replies; 5+ messages in thread
From: Robert Longeon @ 2001-05-02 15:20 UTC (permalink / raw)
  To: caml-list

At 16:55 02/05/01 +0200, vous avez écrit:
>On ne peut pas sans modifier io.c (le run-time caml).  Je l'ai
>implémenté dans un autre cadre, mais extraire un patch limité à cette
>modification est trop casse-pieds.  Peut-être dans une future
>version...

Merci ... c'est ce que malheureusement, je craignais !

>Ceci dit, (std_out n'est pas stdout, et) si
>    output_string std_out "toto"
>laisse le fichier vide, c'est parce qu'il faut faire
>    flush std_out
>ou fermer std_out (ce qui fait flush).


Oui, c'est ce que j'ai fait :

#close_out std_out ;;
close_out stdout ;;
let std_out = open_out "essai.txt" ;;
- : unit = ()
#- : unit = ()
#std_out : out_channel = <abstr>
#flush std_out ;; close_out std_out ;;
- : unit = ()
#- : unit = ()
#


... et le fichier = 0 k !


Merci aussi à Maxence.



Robert.
-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Comment rediriger les entrées/sorties  standards ?
  2001-05-02 12:42 [Caml-list] Comment rediriger les entrées/sorties standards ? Robert Longeon
  2001-05-02 14:49 ` [Caml-list] =?iso-8859-1?Q?Comment_rediriger_les_entrées/sorties_?= " Maxence Guesdon
       [not found] ` <200105021455.f42EtjL25069@waco.inria.fr>
@ 2001-05-03  6:21 ` Bruno Pagano
  2001-05-03  9:51 ` [Caml-list] " Xavier Leroy
  3 siblings, 0 replies; 5+ messages in thread
From: Bruno Pagano @ 2001-05-03  6:21 UTC (permalink / raw)
  To: Robert Longeon; +Cc: caml-list


Bonjour,

vous pouvez essayer ceci :

---------
open Unix

let fd_file = openfile "trace" [O_WRONLY;O_CREAT] (6*64) 

let _ = dup2 fd_file stdout 

let _ = print_endline "texte" ; flush Pervasives.stdout 
---------

sans oublier de faire le link avec unix.cma 

Pour tous ces problemes, Xavier Leroy a ecrit un poly de cours
sur Unix et camllight qui est tres bien fait et qui contient
beaucoup d'exemples classiques. Il doit etre accessible depuis
sa page Web.


-- 
Bruno Pagano
-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Caml-list] Re: [Caml-list] Comment rediriger les entrées/sorties  standards ?
  2001-05-02 12:42 [Caml-list] Comment rediriger les entrées/sorties standards ? Robert Longeon
                   ` (2 preceding siblings ...)
  2001-05-03  6:21 ` [Caml-list] Comment rediriger les entrées/sorties standards ? Bruno Pagano
@ 2001-05-03  9:51 ` Xavier Leroy
  3 siblings, 0 replies; 5+ messages in thread
From: Xavier Leroy @ 2001-05-03  9:51 UTC (permalink / raw)
  To: Robert Longeon; +Cc: caml-list

[English summary: redirecting standard output to a file from a
 Caml program; Unix file descriptor hacking.]

> Je voudrait rediriger les entrées/sorties standards. Je croyais pouvoir le 
> faire en tapant :
> let std_out = open_out "c:\projet\entree"
> mais  l'écriture se fait toujours à l'écran.

Vous pouvez facilement rediriger la sortie du formatteur (module
Format, la chose qui imprime joliment les sorties du toplevel en
particulier) à l'aide de Format.set_formatter_out_channel.

Pour rediriger toutes les sorties faites sur stdout, il faut se
plonger dans les arcanes du module Unix:

  let oc = 
    Unix.openfile "/tmp/myfile"
                  [Unix.O_WRONLY; Unix.O_CREAT; Unix.O_TRUNC] 0o666 in
  flush stdout;
  Unix.dup2 oc Unix.stdout;
  Unix.close oc

Après exécution du code ci-dessus, toutes les sorties sur stdout
(et même celles sur Unix.stdout) iront dans le fichier /tmp/myfile.
Attention, ceci n'est pas réversible.  Si plus tard vous voulez
annuler la redirection, il faut faire un peu plus compliqué:

  let saved_stdout = Unix.dup Unix.stdout in
  let oc = 
    Unix.openfile "/tmp/myfile"
                  [Unix.O_WRONLY; Unix.O_CREAT; Unix.O_TRUNC] 0o666 in
  flush stdout;
  Unix.dup2 oc Unix.stdout;
  Unix.close oc;
  (* ici toutes les sorties sur stdout vont dans le fichier *)
  flush stdout;
  Unix.dup2 saved_stdout Unix.stdout;
  Unix.close saved_stdout;
  (* ici on est revenu à l'état initial *)

Ces exemples sont pour Objective Caml, mais je crois que l'on peut
faire la même chose en Caml Light, mutando mutandis.

- Xavier Leroy
-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2001-05-03 11:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-02 12:42 [Caml-list] Comment rediriger les entrées/sorties standards ? Robert Longeon
2001-05-02 14:49 ` [Caml-list] =?iso-8859-1?Q?Comment_rediriger_les_entrées/sorties_?= " Maxence Guesdon
     [not found] ` <200105021455.f42EtjL25069@waco.inria.fr>
2001-05-02 15:20   ` [Caml-list] Comment_rediriger_les_entrees/sorties_standards ? Robert Longeon
2001-05-03  6:21 ` [Caml-list] Comment rediriger les entrées/sorties standards ? Bruno Pagano
2001-05-03  9:51 ` [Caml-list] " Xavier Leroy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).