gpt4 book ai didi

c++ - 获取 HPUX 上正在运行的进程的可执行文件的完整路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:37 25 4
gpt4 key购买 nike

我想在没有 root 权限的情况下使用 C++ 代码获取正在运行的进程(可执行文件)的完整路径。有人可以建议实现这一目标的方法。

在 Linux 平台上,我可以使用以下方式来完成。

char exepath[1024] = {0};
char procid[1024] = {0};
char exelink[1024] = {0};

sprintf(procid, "%u", getpid());

strcpy(exelink, "/proc/");
strcat(exelink, procid);
strcat(exelink, "/exe");

readlink(exelink, exepath, sizeof(exepath));

此处 exepath 为我们提供了可执行文件的完整路径。

类似地,对于 Windows,我们使用

GetModuleFileName(NULL, exepath, sizeof(exepath));  /* get fullpath of the service */

请帮助我如何在 HP-UX 上执行此操作,因为 HP-UX 中没有/proc 目录。

最佳答案

首先,我想评论一下您的 Linux 解决方案:它大约是所需长度的 5 倍,并且执行了很多完全不必要的操作,并且使用了完全错误的 1024 魔数(Magic Number):

$ grep PATH_MAX /usr/include/linux/limits.h 
#define PATH_MAX 4096 /* # chars in a path name */

这是一个正确的最小替换:

#include <limits.h>
...
char exepath[PATH_MAX] = {0};
readlink("/proc/self/exe", exepath, sizeof(exepath));

其次,在 HP-UX 上您可以使用 shl_get_r()获取有关所有已加载模块的信息。在索引 0 处,您将找到有关主要可执行文件的信息。 desc.filename将指向位于 execve(2) 的可执行文件的名称时间。

不幸的是,该名称是相对的,因此您可能需要搜索 $PATH ,如果应用程序执行了可能会失败 putenv("PATH=some:new:path")或者如果原始的 exename 是例如./a.out应用程序执行了 chdir(2)从那以后。

关于c++ - 获取 HPUX 上正在运行的进程的可执行文件的完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com