#include  <unistd.h>
#include  <dlfcn.h> // 需要定义 _GNU_SOURCE,链接:-ldl

// 获取可执行程序或.so的路径
string GeCurrentModuleDir()
{
	string sPath = "./";

	Dl_info dlinfo;
	int ret = dladdr((void*)GeCurrentModuleDir, &dlinfo);
	if (ret != 0)
	{
		sPath = dlinfo.dli_fname;
	}

	std::size_t pos = sPath.find_last_of('/');
	if (pos != string::npos)
	{
		sPath = sPath.substr(0,pos);
	}

	return sPath;
}

// 获取可执行程序的路径
string GeCurrentExeDir()
{
	char szExePath[500];
	strcpy(szExePath,"./");

	int cnt = readlink("/proc/self/exe", szExePath, 500);

	string sPath = szExePath;
	std::size_t pos = sPath.find_last_of('/');
	if (pos != string::npos)
	{
		sPath = sPath.substr(0, pos);
	}

	return sPath;
}



本文链接地址: Linux下获取可执行程序或.so的路径
http://qingfengju.com/index.asp?id=400

分类:Linux 查看次数:5313 发布时间:2016-12-29 12:03:20