* [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
[parent not found: <200105021455.f42EtjL25069@waco.inria.fr>]
* [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