converting between a Ptr a and an Integer

Hi, is there any way to convert between a Ptr a and an Integer? (I would like to attach to shared memory and dereference pointers to certain memory addresses, as you would do in C.) If there is no way at all, I think I could still get along by defining c_shmat as c_shmat :: CInt -> CInt -> CInt -> IO (Ptr a) and perform calculations using plusPtr, but then how do I check if I got back the correct address, and not (void *) -1, which is what shmat returns on error? Any help very much appreciated! Thanks Sigrid

Hi, You can use: ptrToIntPtr :: Ptr a -> IntPtr intPtrToPtr :: IntPtr -> Ptr a Cheers Sylvain Le 07/12/2013 18:58, keydana@gmx.de a écrit :
Hi,
is there any way to convert between a Ptr a and an Integer? (I would like to attach to shared memory and dereference pointers to certain memory addresses, as you would do in C.)
If there is no way at all, I think I could still get along by defining c_shmat as
c_shmat :: CInt -> CInt -> CInt -> IO (Ptr a)
and perform calculations using plusPtr,
but then how do I check if I got back the correct address, and not (void *) -1, which is what shmat returns on error?
Any help very much appreciated!
Thanks Sigrid _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

There is a module in base that let's you do pointer arith in Haskell. I forget where it is. But it's there. No need to cast your pointer to an int and back. On Saturday, December 7, 2013, Sylvain HENRY wrote:
Hi,
You can use: ptrToIntPtr :: Ptr a -> IntPtr intPtrToPtr :: IntPtr -> Ptr a
Cheers Sylvain
Le 07/12/2013 18:58, keydana@gmx.de a écrit :
Hi,
is there any way to convert between a Ptr a and an Integer? (I would like to attach to shared memory and dereference pointers to certain memory addresses, as you would do in C.)
If there is no way at all, I think I could still get along by defining c_shmat as
c_shmat :: CInt -> CInt -> CInt -> IO (Ptr a)
and perform calculations using plusPtr,
but then how do I check if I got back the correct address, and not (void *) -1, which is what shmat returns on error?
Any help very much appreciated!
Thanks Sigrid _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Carter Schonwald
-
keydana@gmx.de
-
Sylvain HENRY