20 lines
569 B
Haskell
20 lines
569 B
Haskell
module GetHostName where
|
|
|
|
import Foreign.Marshal.Array ( allocaArray0, peekArray0 )
|
|
import Foreign.C.Types ( CInt(..), CSize(..) )
|
|
import Foreign.C.String ( CString, peekCString )
|
|
import Foreign.C.Error ( throwErrnoIfMinus1_ )
|
|
|
|
getHostName :: IO String
|
|
getHostName = do
|
|
let size = 256
|
|
allocaArray0 size $ \ cstr -> do
|
|
throwErrnoIfMinus1_ "getHostName" $ c_gethostname cstr (fromIntegral size)
|
|
peekCString cstr
|
|
|
|
foreign import ccall "gethostname"
|
|
c_gethostname :: CString -> CSize -> IO CInt
|
|
|
|
main = do hostName <- getHostName
|
|
putStrLn hostName
|