linux 获取当前进程的可执行文件所在的目录
2013-04-07 19:38
656 查看
/proc/self
/proc 文件系统的一个额外的项目使程序可以更方便地使用 /proc 文件系统找到关于自身的信息。/proc/self 是一个指向当前进程对应的 /proc 进程目录的符号链接。/proc/self 的链接目标决定于正在监视它的进程:每个进程都看到自己的 /proc 目录项是链接的目标。
举例来说,代码 是一个通过读 /proc/self 链接对象来确定自身进程 ID 的程序
从 /proc/self 获得进程 ID
#include <stdio.h> #include <sys/types.h> #include <unistd.h> /* 返回/proc/self符号链接所确定的调用进程ID。 */ pid_t get_pid_from_proc_self () { char target[32]; int pid; /* 读符号链接的目标。*/ readlink (“/proc/self”, target, sizeof (target)); /* 目标是以这个进程 ID 命名的目录。*/ sscanf (target, “%d”, &pid); return (pid_t) pid; } int main () { printf (“/proc/self reports process id %d\n”, (int) get_pid_from_proc_self ()); printf (“getpid() reports process id %d\n”, (int) getpid ()); return 0; }
/proc/self/exe get_self_executable_directory 用于获取当前进程的可执行文件所在的目录。这个目录可被用于寻找其它的模块;它们在运行时被安装 在同一目录下。这个函数通过读取 /proc 文件系统提供的符号链接 /proc/self/exe
char* get_self_executable_directory () { int rval; char link_target[1024]; char* last_slash; size_t result_length; char* result; /* 读符号链接 /proc/self/exe 的目标。 */ rval = readlink ("/proc/self/exe", link_target, sizeof (link_target)); if (rval == -1) /* readlink调用失败,所以中止。*/ abort (); else /* 目标地址以 NUL 中止。 */ link_target[rval] = '\0'; /* 我们想对执行性文件名做去尾操作以获得包含它的目录。找到最右边的斜线。 */ last_slash = strrchr (link_target, '/'); if (last_slash == NULL || last_slash == link_target) /* 一些异常正在发生。 */ abort (); /* 分配一个缓存来管理结果路径。*/ result_length = last_slash - link_target; result = (char*) xmalloc (result_length + 1); /* 复制结果。*/ strncpy (result, link_target, result_length); result[result_length] = '\0'; return result; }
相关文章推荐
- Linux下获取当前进程的执行文件的绝对路径和所在目录(通过/proc/self/exe链接)
- Linux C 获取当前进程可执行文件路径
- Windows VC++ 调整进程当前目录为程序可执行文件所在目录
- Linux:获取当前进程的执行文件的绝对路径
- GetModuleFileName 获取当前程序可执行文件所在目录
- 获取当前进程文件所在目录,用于替代GetCurrentDirectory
- Go 获取当前可执行文件的所在目录
- Windows VC++ 调整进程当前目录为程序可执行文件所在目录
- Windows和Linux下获取当前可执行文件路径和工作目录
- Linux:获取当前进程的执行文件的绝对路径
- Linux shell获取执行脚本文件所在的目录
- linux 内核中得到 当前进程 对应的可执行文件的 绝对路径
- win7/10中以管理员身份运行bat脚本时,获取当前文件所在目录
- Windows命令行获取当前bat文件所在目录,添加永久系统环境变量的方法
- [Windows]_[MacOSX]_[获取程序的执行文件所在路径(目录)]
- win7中以管理员身份运行bat脚本时,获取当前文件所在目录
- Linux 下修改配置实现在当前目录下寻找可执行文件
- Windows命令行获取当前bat文件所在目录,添加永久系统环境变量的方法
- 在Linux下获取当前运行程序可执行文件全路径(不使用real_path()函数)
- win7/10中以管理员身份运行bat脚本时,获取当前文件所在目录