当前位置: 技术问答>linux和unix
在linux下如何获得当前可执行文件的路径
来源: 互联网 发布时间:2015-10-30
本文导语: rt,如何获得当前进程对应的可执行文件的全路径? | 如果楼主不在意可能导致的安全隐患,可以使用procfs,然后readlink,把当前进程的pid对应的目录下面的file指向的位置读出来(注意需要先...
rt,如何获得当前进程对应的可执行文件的全路径?
|
如果楼主不在意可能导致的安全隐患,可以使用procfs,然后readlink,把当前进程的pid对应的目录下面的file指向的位置读出来(注意需要先挂载procfs)
pit_t mypid = getpid();
sprintf(strsrc, "/proc/%d/file", mypid);
readlink(strsrc, strdest, LEN);//LEN最好是你的_POSIX_PATH_MAX
pit_t mypid = getpid();
sprintf(strsrc, "/proc/%d/file", mypid);
readlink(strsrc, strdest, LEN);//LEN最好是你的_POSIX_PATH_MAX
|
这个要看procfs的实现者到底怎么实现的,我给出的是基于FreeBSD的。
另外,可能也不是所有的Unix-like都有procfs,另外出于安全考虑,FreeBSD默认是不挂载procfs的
另外,可能也不是所有的Unix-like都有procfs,另外出于安全考虑,FreeBSD默认是不挂载procfs的
|
但是实际上也常常是相对路径,所以楼上的方法有时也解决不了问题。
如果支持/proc文件系统,下面的代码可以解决你的问题:
#include
#include
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif
char * get_exe_name() {
static char buf[PATH_MAX];
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if ( rslt = PATH_MAX ) {
return NULL;
}
buf[rslt] = '';
return buf;
}
int main( void )
{
char * exe_name = get_exe_name();
puts( exe_name );
return 0;
}
如果不支持/proc文件系统,我也没什么好办法了。
如果支持/proc文件系统,下面的代码可以解决你的问题:
#include
#include
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif
char * get_exe_name() {
static char buf[PATH_MAX];
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if ( rslt = PATH_MAX ) {
return NULL;
}
buf[rslt] = '';
return buf;
}
int main( void )
{
char * exe_name = get_exe_name();
puts( exe_name );
return 0;
}
如果不支持/proc文件系统,我也没什么好办法了。
|
没个进程在/proc下都有一个以进程号命名的目录.
在该目录下有exe文件,该文件是一个链接文件,它指向的路径就是该进程的全路径.
用readlink读exe文件返回该进程的全路径
在该目录下有exe文件,该文件是一个链接文件,它指向的路径就是该进程的全路径.
用readlink读exe文件返回该进程的全路径