unix-2.7.2.2: POSIX functionality

Copyright | (c) Volker Stolz <vs@foldr.org> 2003
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | vs@foldr.org
Stability | provisional
Portability | non-portable (requires POSIX)
Safe Haskell | Trustworthy
Language | Haskell2010

System.Posix.DynamicLinker.Prim

Contents

- low level API

Description

`dlopen(3)` and friends Derived from `GModule.chs` by M.Weber & M.Chakravarty which is part of c2hs. I left the API more or less the same, mostly the flags are different.

Synopsis

- c_dlopen :: CString -> CInt -> IO (Ptr ())
- c_dlsym :: Ptr () -> CString -> IO (FunPtr a)
- c_dlerror :: IO CString
- c_dlclose :: Ptr () -> IO CInt
- haveRtldNext :: Bool
- haveRtldLocal :: Bool
- packRTLDFlags :: [RTLDFlags] -> CInt
- data RTLDFlags
  - = RTLD_LAZY
  - | RTLD_NOW
  - | RTLD_GLOBAL
  - | RTLD_LOCAL
- packDL :: DL -> Ptr ()
- data DL
  - = Null
  - | Next
  - | Default
  - | DLHandle (Ptr ())

# low level API

c_dlopen :: CString -> CInt -> IO (Ptr ()) #

c_dlsym :: Ptr () -> CString -> IO (FunPtr a) #

c_dlerror :: IO CString #

c_dlclose :: Ptr () -> IO CInt #

haveRtldNext :: Bool #

On some hosts (e.g. SuSe and Ubuntu Linux) `RTLD_NEXT` (and `RTLD_DEFAULT`) are not visible without setting the macro `_GNU_SOURCE`. Since we don't want to define this macro, you can use the function `haveRtldNext` to check wether the flag `Next` is available. Ideally, this will be optimized by the compiler so that it should be as efficient as an `#ifdef`.

If you fail to test the flag and use it although it is undefined, `packDL` will throw an error.

haveRtldLocal :: Bool #

Deprecated: defaults to True

packRTLDFlags :: [RTLDFlags] -> CInt #

data RTLDFlags #

Flags for `dlopen`.

Constructors

RTLD_LAZY |
RTLD_NOW |
RTLD_GLOBAL |
RTLD_LOCAL |

Instances

Read RTLDFlags # |
Methods readsPrec :: Int -> ReadS RTLDFlags Source # readList :: ReadS [RTLDFlags] Source # readPrec :: ReadPrec RTLDFlags Source # readListPrec :: ReadPrec [RTLDFlags] Source #
Show RTLDFlags # |
Methods showsPrec :: Int -> RTLDFlags -> ShowS Source # show :: RTLDFlags -> String Source # showList :: [RTLDFlags] -> ShowS Source #

packDL :: DL -> Ptr () #

data DL #

Flags for `dlsym`. Notice that `Next` might not be available on your particular platform! Use `haveRtldNext`.

If `RTLD_DEFAULT` is not defined on your platform, `packDL` `Default` reduces to `nullPtr`.

Constructors

Null |
Next |
Default |
DLHandle (Ptr ()) |

Instances

Show DL # |
Methods showsPrec :: Int -> DL -> ShowS Source # show :: DL -> String Source # showList :: [DL] -> ShowS Source #