Re: Calling ioctl_ptr

Xavier Leroy (xleroy@pauillac.inria.fr)
Mon, 4 Mar 1996 21:32:45 +0100 (MET)

From: Xavier Leroy <xleroy@pauillac.inria.fr>
Message-Id: <199603042032.VAA02627@pauillac.inria.fr>
Subject: Re: Calling ioctl_ptr
To: johnm@vlibs.com (John Gerard Malecki)
Date: Mon, 4 Mar 1996 21:32:45 +0100 (MET)
In-Reply-To: <199602292019.MAA03081@owl.vlibs.com> from "John Gerard Malecki" at Feb 29, 96 12:19:36 pm

> I need to explicitly manipulate modem/rs-232 control lines on a 32 bit
> sun-0s4.1 system. I was going to invoke ioctl_ptr to do the job.
>
> The first argument to ioctl_ptr is an int. The bits which determine a
> modem control line request are 30 and 31. Is there a trick I can use
> to set only bit 30 and not 31 and vice-versa?

I'm afraid not. That's a weakness of the tagged data representation
scheme used in Caml Light and other ML implementations.

The "unix" library provides a reasonably high-level interface to the
POSIX termios functions, which provide some control on the rs-232 signals.

If that's not sufficient, I'd recommend that you write small C
wrappers around the ioctls you need. This will not only solve the
problem with 31 vs. 32 bit integers, but also allow the use of
symbolic names for ioctl codes, something not easily done in Caml.

Although most of the Unix system calls have a reasonably nice
presentation in Caml, ioctl and fcntl do not, and are fairly hard to
use in any language other than C.

- Xavier Leroy