Foreign.C.Error
Foreign.C.Error
Foreign.C.Error 모듈은 errno의 C에 특화된 오류 처리를 돕는 기능을 제공해요.
본문
module Foreign.C.Error (
Errno(Errno), eOK, e2BIG, eACCES, eADDRINUSE, eADDRNOTAVAIL, eADV,
eAFNOSUPPORT, eAGAIN, eALREADY, eBADF, eBADMSG, eBADRPC, eBUSY,
eCHILD, eCOMM, eCONNABORTED, eCONNREFUSED, eCONNRESET, eDEADLK,
eDESTADDRREQ, eDIRTY, eDOM, eDQUOT, eEXIST, eFAULT, eFBIG, eFTYPE,
eHOSTDOWN, eHOSTUNREACH, eIDRM, eILSEQ, eINPROGRESS, eINTR, eINVAL,
eIO, eISCONN, eISDIR, eLOOP, eMFILE, eMLINK, eMSGSIZE, eMULTIHOP,
eNAMETOOLONG, eNETDOWN, eNETRESET, eNETUNREACH, eNFILE, eNOBUFS,
eNODATA, eNODEV, eNOENT, eNOEXEC, eNOLCK, eNOLINK, eNOMEM, eNOMSG,
eNONET, eNOPROTOOPT, eNOSPC, eNOSR, eNOSTR, eNOSYS, eNOTBLK,
eNOTCONN, eNOTDIR, eNOTEMPTY, eNOTSOCK, eNOTTY, eNXIO, eOPNOTSUPP,
ePERM, ePFNOSUPPORT, ePIPE, ePROCLIM, ePROCUNAVAIL, ePROGMISMATCH,
ePROGUNAVAIL, ePROTO, ePROTONOSUPPORT, ePROTOTYPE, eRANGE, eREMCHG,
eREMOTE, eROFS, eRPCMISMATCH, eRREMOTE, eSHUTDOWN, eSOCKTNOSUPPORT,
eSPIPE, eSRCH, eSRMNT, eSTALE, eTIME, eTIMEDOUT, eTOOMANYREFS,
eTXTBSY, eUSERS, eWOULDBLOCK, eXDEV, isValidErrno, getErrno,
resetErrno, errnoToIOError, throwErrno, throwErrnoIf, throwErrnoIf_,
throwErrnoIfRetry, throwErrnoIfRetry_, throwErrnoIfMinus1,
throwErrnoIfMinus1_, throwErrnoIfMinus1Retry, throwErrnoIfMinus1Retry_,
throwErrnoIfNull, throwErrnoIfNullRetry, throwErrnoIfRetryMayBlock,
throwErrnoIfRetryMayBlock_, throwErrnoIfMinus1RetryMayBlock,
throwErrnoIfMinus1RetryMayBlock_, throwErrnoIfNullRetryMayBlock,
throwErrnoPath, throwErrnoPathIf, throwErrnoPathIf_,
throwErrnoPathIfNull, throwErrnoPathIfMinus1, throwErrnoPathIfMinus1_
) where
Foreign.C.Error 모듈은 errno의 C에 특화된 오류 처리를 돕는 기능을 제공해요.
26.1 errno 값의 Haskell 표현 (Haskell representations of errno values)
newtype Errno
= Errno CInt
errno 값을 나타내는 Haskell 표현이에요. 구현이 의도적으로 노출되어 있는데, 그 이유는 사용자가 자신만의 Errno 값 정의를 추가할 수 있게 하기 위해서예요.
instance Eq Errno
26.1.1 공통 errno 기호 (Common errno symbols)
운영체제 및/또는 C 라이브러리에 따라 서로 다른 errno 값을 지원하는 경우가 많아요. 이 모듈은 공통적인 값들을 정의하지만, Errno가 열린(open) 정의이므로 사용자는 미리 정의되지 않은 정의를 추가할 수도 있어요.
eOK :: Errno
e2BIG :: Errno
eACCES :: Errno
eADDRINUSE :: Errno
eADDRNOTAVAIL :: Errno
eADV :: Errno
eAFNOSUPPORT :: Errno
eAGAIN :: Errno
eALREADY :: Errno
eBADF :: Errno
eBADMSG :: Errno
eBADRPC :: Errno
eBUSY :: Errno
eCHILD :: Errno
eCOMM :: Errno
eCONNABORTED :: Errno
eCONNREFUSED :: Errno
eCONNRESET :: Errno
eDEADLK :: Errno
eDESTADDRREQ :: Errno
eDIRTY :: Errno
eDOM :: Errno
eDQUOT :: Errno
eEXIST :: Errno
eFAULT :: Errno
eFBIG :: Errno
eFTYPE :: Errno
eHOSTDOWN :: Errno
eHOSTUNREACH :: Errno
eIDRM :: Errno
eILSEQ :: Errno
eINPROGRESS :: Errno
eINTR :: Errno
eINVAL :: Errno
eIO :: Errno
eISCONN :: Errno
eISDIR :: Errno
eLOOP :: Errno
eMFILE :: Errno
eMLINK :: Errno
eMSGSIZE :: Errno
eMULTIHOP :: Errno
eNAMETOOLONG :: Errno
eNETDOWN :: Errno
eNETRESET :: Errno
eNETUNREACH :: Errno
eNFILE :: Errno
eNOBUFS :: Errno
eNODATA :: Errno
eNODEV :: Errno
eNOENT :: Errno
eNOEXEC :: Errno
eNOLCK :: Errno
eNOLINK :: Errno
eNOMEM :: Errno
eNOMSG :: Errno
eNONET :: Errno
eNOPROTOOPT :: Errno
eNOSPC :: Errno
eNOSR :: Errno
eNOSTR :: Errno
eNOSYS :: Errno
eNOTBLK :: Errno
eNOTCONN :: Errno
eNOTDIR :: Errno
eNOTEMPTY :: Errno
eNOTSOCK :: Errno
eNOTTY :: Errno
eNXIO :: Errno
eOPNOTSUPP :: Errno
ePERM :: Errno
ePFNOSUPPORT :: Errno
ePIPE :: Errno
ePROCLIM :: Errno
ePROCUNAVAIL :: Errno
ePROGMISMATCH :: Errno
ePROGUNAVAIL :: Errno
ePROTO :: Errno
ePROTONOSUPPORT :: Errno
ePROTOTYPE :: Errno
eRANGE :: Errno
eREMCHG :: Errno
eREMOTE :: Errno
eROFS :: Errno
eRPCMISMATCH :: Errno
eRREMOTE :: Errno
eSHUTDOWN :: Errno
eSOCKTNOSUPPORT :: Errno
eSPIPE :: Errno
eSRCH :: Errno
eSRMNT :: Errno
eSTALE :: Errno
eTIME :: Errno
eTIMEDOUT :: Errno
eTOOMANYREFS :: Errno
eTXTBSY :: Errno
eUSERS :: Errno
eWOULDBLOCK :: Errno
eXDEV :: Errno
26.1.2 Errno 함수 (Errno functions)
isValidErrno :: Errno -> Bool
주어진 Errno 값이 해당 시스템에서 유효하면 True를 돌려줘요. 이는 Errno의 Eq 인스턴스가 유효한 Errno 값에 대해서만 정의되므로 시스템에 의존적이라는 뜻이기도 해요.
getErrno :: IO Errno
현재 스레드에서 errno의 현재 값을 가져와요.
resetErrno :: IO ()
현재 스레드의 errno 값을 eOK로 재설정해요.
errnoToIOError
:: String -- ^ 오류가 발생한 위치 (the location where the error occurred)
-> Errno -- ^ 오류 번호 (the error number)
-> Maybe Handle -- ^ 오류와 연관된 선택적인 핸들 (optional handle associated with the error)
-> Maybe String -- ^ 오류와 연관된 선택적인 파일 이름 (optional filename associated with the error)
-> IOError
주어진 Errno 값에 기반해 IOError를 구성해요. 선택적인 정보는 오류 메시지의 정확성을 높이는 데 사용될 수 있어요.
throwErrno
:: String -- ^ 오류 위치에 대한 텍스트 설명 (textual description of the error location)
-> IO a
getErrno의 현재 값에 대응하는 IOError를 던져요.
26.1.3 실패할 수 있는 IO 연산을 위한 가드 (Guards for IO operations that may fail)
throwErrnoIf
:: (a -> Bool) -- ^ IO 연산의 결과 값에 적용할 술어 (predicate to apply to the result value of the IO operation)
-> String -- ^ 위치에 대한 텍스트 설명 (textual description of the location)
-> IO a -- ^ 실행할 IO 연산 (the IO operation to be executed)
-> IO a
IO 액션의 결과 값이 주어진 술어를 만족하면 getErrno의 현재 값에 대응하는 IOError를 던져요.
throwErrnoIf_ :: (a -> Bool) -> String -> IO a -> IO ()
throwErrnoIf와 같지만, 오류 처리를 마친 뒤 IO 액션의 결과를 버려요.
throwErrnoIfRetry :: (a -> Bool) -> String -> IO a -> IO a
throwErrnoIf와 같지만, IO 액션이 eINTR 오류 코드를 돌려줄 때 그 액션을 재시도해요. 이는 중단된(interrupted) POSIX 시스템 호출에 대한 표준 재시도 루프에 해당해요.
throwErrnoIfRetry_ :: (a -> Bool) -> String -> IO a -> IO ()
throwErrnoIfRetry와 같지만, 그 결과를 버려요.
throwErrnoIfMinus1 :: Num a => String -> IO a -> IO a
IO 액션이 -1 결과를 돌려주면 getErrno의 현재 값에 대응하는 IOError를 던져요.
throwErrnoIfMinus1_ :: Num a => String -> IO a -> IO ()
throwErrnoIfMinus1과 같지만, 그 결과를 버려요.
throwErrnoIfMinus1Retry :: Num a => String -> IO a -> IO a
IO 액션이 -1 결과를 돌려주면 getErrno의 현재 값에 대응하는 IOError를 던지되, 중단된(interrupted) 연산의 경우에는 재시도해요.
throwErrnoIfMinus1Retry_ :: Num a => String -> IO a -> IO ()
throwErrnoIfMinus1과 같지만, 그 결과를 버려요.
throwErrnoIfNull :: String -> IO (Ptr a) -> IO (Ptr a)
IO 액션이 nullPtr을 돌려주면 getErrno의 현재 값에 대응하는 IOError를 던져요.
throwErrnoIfNullRetry :: String -> IO (Ptr a) -> IO (Ptr a)
IO 액션이 nullPtr을 돌려주면 getErrno의 현재 값에 대응하는 IOError를 던지되, 중단된 연산의 경우에는 재시도해요.
throwErrnoIfRetryMayBlock
:: (a -> Bool) -- ^ IO 연산의 결과 값에 적용할 술어 (predicate to apply to the result value of the IO operation)
-> String -- ^ 위치에 대한 텍스트 설명 (textual description of the location)
-> IO a -- ^ 실행할 IO 연산 (the IO operation to be executed)
-> IO b -- ^ 즉시 재시도가 막히면(block) 재시도 전에 실행할 액션 (action to execute before retrying if an immediate retry would block)
-> IO a
throwErrnoIfRetry와 같지만, 추가로 연산이 eAGAIN 또는 eWOULDBLOCK 오류 코드를 돌려주면 재시도 전에 대체 액션(alternative action)을 실행해요.
throwErrnoIfRetryMayBlock_ :: (a -> Bool)
-> String -> IO a -> IO b -> IO ()
throwErrnoIfRetryMayBlock과 같지만, 그 결과를 버려요.
throwErrnoIfMinus1RetryMayBlock :: Num a => String
-> IO a -> IO b -> IO a
throwErrnoIfMinus1Retry와 같지만, 막힐(block) 연산도 검사해요.
throwErrnoIfMinus1RetryMayBlock_ :: Num a => String
-> IO a -> IO b -> IO ()
throwErrnoIfMinus1RetryMayBlock과 같지만, 그 결과를 버려요.
throwErrnoIfNullRetryMayBlock :: String
-> IO (Ptr a) -> IO b -> IO (Ptr a)
throwErrnoIfNullRetry와 같지만, 막힐(block) 연산도 검사해요.
throwErrnoPath :: String -> FilePath -> IO a
throwErrno와 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
throwErrnoPathIf :: (a -> Bool)
-> String -> FilePath -> IO a -> IO a
throwErrnoIf와 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
throwErrnoPathIf_ :: (a -> Bool)
-> String -> FilePath -> IO a -> IO ()
throwErrnoIf_와 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
throwErrnoPathIfNull :: String
-> FilePath -> IO (Ptr a) -> IO (Ptr a)
throwErrnoIfNull과 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
throwErrnoPathIfMinus1 :: Num a => String
-> FilePath -> IO a -> IO a
throwErrnoIfMinus1과 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
throwErrnoPathIfMinus1_ :: Num a => String
-> FilePath -> IO a -> IO ()
throwErrnoIfMinus1_과 같지만, 적절할 때 예외에 주어진 경로를 포함해요.
더 알아보기 (Learn more)
- 27장 Foreign.C.String에서 C 문자열 변환을 다뤄요.
errnoToIOError를 활용해 C 오류 값을 나만의IOError로 바꿀 수도 있어요.