comp.lang.ada
 help / color / mirror / Atom feed
From: gisle@apal.ii.uib.no (Gisle S�lensminde)
Subject: Re: Unix SELECT Ada binding
Date: 1999/07/22
Date: 1999-07-22T00:00:00+00:00	[thread overview]
Message-ID: <slrn7pdq6p.bn9.gisle@apal.ii.uib.no> (raw)
In-Reply-To: 379638B1.101427E5@res.raytheon.com

In article <379638B1.101427E5@res.raytheon.com>, Andy Askey wrote:
>Has anyone created an Ada package with binding into the SELECT C library
>function that does I/O multiplexing?  The binding is straight forward
>but there are several macros (FD_SET, FD_CLR, ...) that have to be
>translated into Ada.
>

The unix/C portability seems to be based on the existance of these macros,
and they will be expanded to different things on different platforms.
Interfacing to them can be difficult. 

On solaris (cc -E) FD_SET(a,b) becomes:

( ( b ) -> fds_bits [ ( a ) / ( sizeof ( fds_mask ) * 8 ) ] |= 
( ( unsigned ) 1 << ( ( a ) % ( sizeof ( fds_mask ) * 8 ) ) ) );

On Linux (gcc -E) FD_SET(a,b) becomes:

__asm__ __volatile__ ("btsl %1,%0"	: "=m" ((  ( b ) )->
fds_bits[((  ( a )  ) / (8 * sizeof (__fd_mask)) ) ])	: "r" 
(((int) ( ( a ) )) % (8 * sizeof (__fd_mask)) )	: "cc","memory")  ;
 
And you even got yet another expansion. I just wrote a tiny server,
and for that one, I used one task for each file descriptor I wanted to
listen to. This may use more CPU and memory, but it is more portable. 
(It works on both Linux, Solaris and windows NT in my case)

>For example, the select.h file has the following macro for FD_SET:
>
>#define FD_SET(__n, __p)        ((__p)->fds_bits[(__n)/FD_NFDBITS] |= \
>                                    ((unsigned)1 << ((__n) %
>FD_NFDBITS)))
>
>
>If anyone has an example of this they care to share, we will greatly
>appreciated it.
>
>Thanx.
>Andy
>-- 
>---------------------------------------------------
>|                 Andy Askey                      |
>|              Software Engineer                  |
>|           Raytheon Systems Company              |
>|   670 Discovery Drive, Huntsville, AL  35806    |
>|   Phone: (256) 971-2367  Fax: (256) 971-2306    |
>|        andrew_j_askey@res.raytheon.com          |
>---------------------------------------------------


-- 
--
Gisle S�lensminde ( gisle@ii.uib.no )   





  parent reply	other threads:[~1999-07-22  0:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-07-21  0:00 Unix SELECT Ada binding Andy Askey
1999-07-21  0:00 ` David C. Hoos, Sr.
1999-07-22  0:00 ` Gisle S�lensminde [this message]
1999-07-22  0:00 ` Andi Kleen
1999-07-22  0:00 ` Samuel T. Harris
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox