[Haskell-cafe] POSIX AIO (asych I/O) ...

Galchin, Vasili vigalchin at gmail.com
Tue Jul 1 05:07:03 EDT 2008


instance Storable AIOCB where

    sizeOf _ = (#const sizeof (struct aiocb))

    alignment _ = 1

    poke p_AIOCB (AIOCB aioFd aioLioOpcode aioReqPrio aioOffset aioBuf
aioBytes aioSigevent) = do

       (#poke struct aiocb, aio_fildes) p_AIOCB aioFd

       (#poke struct aiocb, aio_lio_opcode) p_AIOCB aioLioOpcode

       (#poke struct aiocb, aio_reqprio) p_AIOCB aioReqPrio

       (#poke struct aiocb, aio_offset) p_AIOCB aioOffset

       (#poke struct aiocb, aio_buf) p_AIOCB aioBuf

       (#poke struct aiocb, aio_nbytes) p_AIOCB aioBytes

       (#poke struct aiocb, aio_sigevent) p_AIOCB aioSigevent

    peek p_AIOCB = do

       aioFd <- (#peek struct aiocb, aio_fildes) p_AIOCB

       aioLioOpcode <- (#peek struct aiocb, aio_lio_opcode) p_AIOCB

       aioReqPrio <- (#peek struct aiocb, aio_reqprio) p_AIOCB

       aioOffset <- (#peek struct aiocb, aio_offset) p_AIOCB

       aioBuf <- (#peek struct aiocb, aio_buf) p_AIOCB

       aioBytes <- (#peek struct aiocb, aio_nbytes) p_AIOCB

       aioSigevent <- (#peek struct aiocb, aio_sigevent) p_AIOCB

       return (AIOCB aioFd aioLioOpcode aioReqPrio aioOffset aioBuf aioBytes
aioSigevent)



On Tue, Jul 1, 2008 at 2:48 AM, Bulat Ziganshin <bulat.ziganshin at gmail.com>
wrote:

> Hello Vasili,
>
> Tuesday, July 1, 2008, 11:42:26 AM, you wrote:
>
> looks ok, show us your peek/poke code
>
>
> > Hello,
>
> >        I am also testing my aio support. The aio_write binding
> > seems to work ok .. as well as aio_error, Aio_return is a problem
> > child. I think I wrote a really simple binding. I always receive
> > nbytes as 0. I have been staring at the code hoping to catch a
> > stupid mistake. I put putStrLn's in the code. .....Here is the code ...
> >
> > aioReturn :: AIOCB -> IO (AIOCB, ByteCount)
> > aioReturn aiocb = do
> >    allocaBytes (#const sizeof(struct aiocb)) $ \ p_aiocb -> do
> >       poke p_aiocb aiocb
> >       count <- throwErrnoIfMinus1 "aioReturn" (c_aio_return  p_aiocb)
> >        aiocb <- peek p_aiocb
> >       return (aiocb, fromIntegral count)
>
> > foreign import ccall safe "aio.h aio_return"
> >     c_aio_return :: Ptr AIOCB -> IO CInt
>
> > Maybe someone can spot something that I haven't.
> >
> > Thanks, Vasili
> >
>
>
> --
> Best regards,
>  Bulat                            mailto:Bulat.Ziganshin at gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080701/5eb2dfd8/attachment.htm


More information about the Haskell-Cafe mailing list