packages feed

unix-fcntl-0.0.0: examples/record-lock.hs

{-# LANGUAGE ViewPatterns #-}
import Control.Concurrent
import Control.Exception
import System.Environment

import Foreign.Var
import System.Posix.IO

import System.Posix.FileControl

main :: IO ()
main = do
  path:(read -> duration):_ <- getArgs
  flock <- newFlock
  flockType flock $= F_WRLCK
  flockWhence flock $= SEEK_SET
  flockStart flock $= 0
  flockLen flock $= 0
  bracket (openFd path ReadWrite Nothing defaultFileFlags) closeFd $ \fd -> do
    fcntl fd $ F_SETLK flock
    threadDelay $ duration * 10^6