您的位置:首页 > 运维架构 > Linux

linux 获取exe的路径

2013-10-07 14:48 555 查看
使用示例:
int bufsize = 1024;
char buffer[bufsize];
readlink("/proc/self/exe", buf, bufsize);


To summarize:

On Unixes with
/proc
really
straight and realiable way is to:

readlink("/proc/self/exe",
 buf, bufsize)
(Linux)

readlink("/proc/curproc/file",
 buf, bufsize)
(FreeBSD)

readlink("/proc/self/path/a.out",
 buf, bufsize)
(Solaris)

On Unixes without
/proc
(i.e.
if above fails):

If argv[0] starts with "/" (absolute path) this is the path.

Otherwise if argv[0] contains "/" (relative path) append it to cwd (assuming it hasn't been changed yet).

Otherwise search directories in
$PATH
for
executable
argv[0]
.

Afterwards it may be reasonable to check whether the executable isn't actually a symlink. If it is resolve it relative to the symlink directory.

This step is not necessary in /proc method (at least for Linux). There the proc symlink points directly to executable.

Note that it is up to the calling process to set
argv[0]
correctly.
It is right most of the times however there are occasions when the calling process cannot be trusted (ex. setuid executable).

On Windows: use
GetModuleFileName(NULL,
 buf, bufsize)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: