From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA26492; Thu, 3 May 2001 11:51:49 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id LAA26385 for ; Thu, 3 May 2001 11:51:47 +0200 (MET DST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.11.1/8.10.0) with ESMTP id f439piH07159; Thu, 3 May 2001 11:51:44 +0200 (MET DST) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA26606; Thu, 3 May 2001 11:51:44 +0200 (MET DST) Date: Thu, 3 May 2001 11:51:44 +0200 From: Xavier Leroy To: Robert Longeon Cc: caml-list@inria.fr Subject: [Caml-list] Re: =?iso-8859-1?Q?=5BCaml-list=5D_Comment_rediriger_les_entr=E9es=2Fsorties?= =?iso-8859-1?Q?__standards_=3F?= Message-ID: <20010503115144.C25957@pauillac.inria.fr> References: <4.2.0.58.20010502143518.00da89a0@cezanne.auteuil.cnrs-dir.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mutt 1.0i In-Reply-To: <4.2.0.58.20010502143518.00da89a0@cezanne.auteuil.cnrs-dir.fr>; from Robert.Longeon@cnrs-dir.fr on Wed, May 02, 2001 at 02:42:06PM +0200 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk [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