2012-04-09 15 views
5

Ben Haskell sendfile paketinde Bu kod parçasını bulduk:Haskell Yabancı İşlev Arabirimi'nde '#type' ne anlama geliyor?

http://patch-tag.com/r/mae/sendfile/snapshot/current/content/pretty/src/Network/Socket/SendFile/Linux.hsc

-- sendfile64 gives LFS support 
foreign import ccall unsafe "sendfile64" c_sendfile 
    :: Fd -> Fd -> Ptr (#type off64_t) -> (#type size_t) -> IO (#type ssize_t) 

1) #type ortalama ve ne yapar 2) bu hatayı alıyorum neden,

[1 of 1] Compiling Linux.Splice  (splice.hs, splice.o) 

splice.hs:40:12: parse error on input `type' 

kendim aşağıdaki gibi kullanmaya çalıştığım zaman:

ghc --make splice.hs 

splice.hs:

{-# LANGUAGE ForeignFunctionInterface #-} 

module Linux.Splice where 

import Data.Word 
import System.Posix.Types 

-- SPLICE 

-- fcntl.h 
-- ssize_t splice(
-- int   fd_in, 
-- loff_t*  off_in, 
-- int   fd_out, 
-- loff_t*  off_out, 
-- size_t  len, 
-- unsigned int flags 
--); 

foreign import ccall unsafe "fnctl.h splice" c_splice 
    :: Fd 
    -> Ptr (#type {- < parse error -} loff_t) 
    -> Fd 
    -> Ptr (#type loff_t) 
    -> (#type size_t) 
    -> Word 
    -> IO (#type ssize_t) 

+5

http://www.haskell.org/ghc/docs/latest/html/users_guide/hsc2hs.html – sdcvvc

+2

Bu yabancı içeriğin ** "güvenli olmayan" olarak işaretlenmemesi gerektiğini belirtmeliyim. Yabancı bir işlev 'güvensiz' olarak işaretlendiğinde, diğer iş parçacıklarının çalışmasını engelleyebilir ("-dreaded" ile GHC ile derlenmiş bir programda). –

+0

@JoeyAdams Oh Bunu işaret ettiğin için teşekkürler! Vekil sunucum için ağ soketlerinin boru eklemeleri cilalı bir uygulaması üzerinde çalışıyorum. Okuma/yazma döngülerinin yerine Linux'ta kullanmayı umduğum, şu an için diğer işletim sistemlerinde kullanmaya devam ediyorum. –

cevap

5

zamanda scdvvc işaret (kullanarak GHC 7.4.x), bu sisteme özel olarak derlenmiş varlık kod özelleştirmek için hsc2hs tarafından tanımlanan Cı ön işleme makrolar kullanan üzerinde. Kodunuz için tanımlanmış uygun makroları almak için hsc2hs kullanmanız gerekir.

+0

Vay hızlı cevap için teşekkürler :) –

+0

Btw, kim/scdvvc' nedir? –

+2

Asıl sorunuzla ilgili yorum yapan, benden daha fazla krediyi hak eden bir yorumcu. ;) –