
Heres a couple of useful functions for creating a temporary file. getUniqueName creates a unique filename and atomicWrite uses it to atomically update a file on the filesystem by writing to a temporary file and renaming it over the target. John getUniqueName :: IO String getUniqueName = do id <- getProcessID u <- newUnique n <- liftM nodeName getSystemID t <- epochTime return $ n ++ "." ++ show id ++ "." ++ show t ++ "." ++ show (hashUnique u) atomicWrite :: String -> (Handle -> IO a) -> IO a atomicWrite fn action = do n <- getUniqueName let tn = fn ++ "." ++ n v <- E.bracket (openFile tn WriteMode) hClose action rename tn fn return v On Thu, May 22, 2003 at 01:02:57AM +0200, Peter Simons wrote:
Please pardon me if it turns out I'm just blind, but is there any function I can use to get some "unique" information to use for temporary file names and the like? A function that will tell me my process ID, for instance?
I looked through Hugs and GHC, yet couldn't find anything but Data.Unique, and that looks like big-time overkill for the purpose.
Any pointers are appreciated!
-- --------------------------------------------------------------------------- John Meacham - California Institute of Technology, Alum. - john@foo.net ---------------------------------------------------------------------------