getting the path to the executing program

Per Larsson per at
Thu Jan 8 19:02:11 EST 2004

On Thursday 08 January 2004 18.06, Hal Daume III wrote:
> is there a function, related to getProgName, which returns the (absolute)
> path to the current program?
> basically, i want to be able to read a file which i know will be in the
> same directory as the current program, but not necessarily in the same
> directory that we're running it from.

I don't know how to do this in a portable way, but on unix/linux you can use 
the standard trick of reading the symbolic link
/proc/<process-id>/exe .

For example:

import System.Posix.Files  (readSymbolicLink)
import System.Posix.Process (getProcessID)

main = do
    pid <- getProcessID
    path <- readSymbolicLink ("/proc/" ++ (show pid) ++ "/exe")
    putStrLn ("Absolute path of this program is " ++ path)

PS. This doesn't work with interpreted code (Hugs, GHCi) in which case
you get the path to the interpreter itself.


More information about the Haskell mailing list