На самом деле нет никакого гарантированного переносимого способа сделать это, но мне нравится использовать этот код, потому что он работает в подавляющем большинстве случаев (если не используются символические ссылки или другая магия):
boost::filesystem::current_path(boost::filesystem::path(argv[0]).remove_filename());
Если вы хотите использовать специфичный для платформы код, посмотрите на GetModuleFileName
в Windows и сочетание getpid
, читая из /proc
и readlink
в Linux.