Date: Wed, 12 Mar 1997 20:50:09 +0100 (MET)
Message-Id: <199703121950.UAA13512@kickapoo.inria.fr>
To: Xavier.Leroy@inria.fr
Subject: Re: Objective Caml's Unix libraries
From: Bruno.Verlyck@inria.fr
[ english summary at the end ]
From: Xavier Leroy <Xavier.Leroy@inria.fr>
Date: Wed, 12 Mar 1997 10:41:17 +0100 (MET)
No. File descriptors are an abstract type in the Unix library, and
this is a conscious decision.
> File descriptors are integers indeed.
That's what C programming lets you believe, but they are not. It
does not make sense to add or multiply two file descriptors, for
instance.
Tout ceci est indiscutable.
At any rate, the only way to pass file descriptors to an exec'd
program within the Unix library is to map them using dup2 to stdin,
stdout or stderr.
I agree it's an unpleasant constraint, but it's a small price to
pay for the additional safety brought by having abstract file
descriptors.
Le probl=E8me est que C suinte de partout. Si je devais impl=E9menter
/bin/sh en Caml, la librairie Unix ne me permettrait pas de traiter la
redirection <&3. Une fonction fileno : filedesc -> int r=E9soudrait ce
probl=E8me (et celui de Pawel.Wojciechowski), mais je ne vois pas
comment traiter >&3 (je n'ai r=E9fl=E9chi que 5 minutes).
Bon, l'interface de /bin/sh est de niveau scandaleusement bas, il y a
(n'en doutons pas) moyen d'en concevoir une meilleure. Encore faut-il
pouvoir (avoir le droit de) changer les specs... Et l=E0, on n'a pas
n=E9cessairement le choix du prix =E0 payer. R=E9-=E9crire une librairie U=
nix
modifi=E9e ? (il faudrait l'appeler Shell :-)
In english: Xavier's arguments are very strong. But within them (and
the Unix library), I can't write a /bin/sh clone, because of >&3
(here, and for Pawel.Wojciechowski, it would be enough to add a fun
fileno : filedesc -> int, like the stdio macro) and <&3 -- but I
thought about it for only 5 min.
My point is that you can try to change the specs, but you have to be
allowed to...
Bruno.
Disclaimer: I don't need anything more than the Unix library.