linux下ACE是否包装获取当前应用程序路径
请问ACE的OS适配层是否有对获取应用应用程序当前路径提供了包装。 ACE_OS::getcwd 谢谢关注,不过这个函数好像只能取调用者当前路径。
而不是exe的所在的全路径。 你说的这个是windows系统的吧。
没发现封装函数,直接调用API呗,API很简单啊。
GetModuleFileName 嗯,windows下很容易实现,
主要是linux下。 可以使用procfs,然后readlink,把当前进程的pid对应的目录下面的file指向的位置读出来(注意需要先挂载procfs)
pit_t mypid = getpid();
sprintf(strsrc, "/proc/%d/file", mypid);
readlink(strsrc, strdest, LEN);
进程在/proc下都有一个以进程号命名的目录.
在该目录下有exe文件,该文件是一个链接文件,它指向的路径就是该进程的全路径.
用readlink读exe文件返回该进程的全路径
上面是我baidu出的答案。 当前应用程序路径还是exe的所在的全路径?
这两个是不同的概念。前者的话就是ACE_OS::getcwd
后者的话就要绕一下,比如winston老大贴的方法。 谢谢大家。
winston提供的代码,我之前也百度出来过,
不过没有提到挂载procfs,
请问一下,注意需要先挂载procfs,这个什么意思,
如果不复杂请顺手帮忙解释一下,如果复杂的话,
那么我就自己去百度去。
[ 本帖最后由 sunway 于 2009-7-31 14:03 编辑 ] 可以问下你是怎么解决这个问题的吗????我也碰到这个难缠的问题了 void CUtil::GetAppPath(std::string &sPath)
{
char buf = {0};
long size;
char *ptr;
size = pathconf(".", _PC_PATH_MAX);
if((ptr = (char *)malloc((size_t)size)) != NULL)
{
memset(ptr,0,size);
sprintf(ptr,"/proc/%d/exe",getpid());
}else return -1;
readlink(ptr,buf,size);
free(ptr);
ptr = NULL;
sPath = buf;
int nPos = sPath.find_last_of("/");
sPath = sPath.substr(0,nPos);
}
页:
[1]