10
A
回答
12
在标准C和glibc,你已经ARGV [0]:
int main (int argc, char *argv[])
的第一元件argv
数组是程序名称。
但是,它自己并不足以确定可执行文件的确切位置。参数实际上是由运行程序的程序设置的 - 无论是shell还是窗口管理器 - 它们都不是非常有用。如果你的程序是在路径和你
your_program
在bash shell中只需运行该程序,然后在“your_program”是您将argv中获取[0]。
对于完整的可执行文件路径,linux有/proc
filesystem。在/proc
下,每个正在运行的进程都会获得自己的“目录”,并以其进程ID命名。运行过程也可以在/proc/self
下看到自己的子树。每个进程获得的文件之一是/proc/[pid]/exe
,这是与进程正在运行的实际可执行文件的符号链接。
这样你就可以得到这样的实际完全可执行文件的路径:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
char exe[1024];
int ret;
ret = readlink("/proc/self/exe",exe,sizeof(exe)-1);
if(ret ==-1) {
fprintf(stderr,"ERRORRRRR\n");
exit(1);
}
exe[ret] = 0;
printf("I am %s\n",exe);
}
您可能还可以直接传递到/proc/[pid]/exe
addr2line()
。
5
可以访问的argv [0],但无实际变量的引用,通过在glibc的使用保存指针:https://github.com/rbdixon/glibc/blob/master/misc/init-misc.c
实例:
extern const char *__progname;
int print_progname()
{
return puts(__progname);
}
的argv [0]不一定反映尽管用来调用该程序的名称。 见man 2 execve and man 7 environ欲了解更多信息。
相关问题
- 1. 检索可执行文件
- 2. 函数获取当前执行文件的目录名称
- 3. 如何从当前可执行文件获取函数地址?
- 4. 移动当前可执行文件c#
- 5. 提取当前的可执行文件名
- 6. 如何找到当前的可执行文件名?
- 7. 如何以检索可执行文件
- 8. Vim:执行当前文件?
- 9. PHP - 从函数内部结束当前文件的执行
- 10. 更改当前可执行文件的内容。可能吗?
- 11. 如何在AutoHotkey中检索当前脚本的文件名?
- 12. 从C#中的函数中获取当前执行函数的名称
- 13. 如何覆盖我当前运行的可执行文件?
- 14. 找到当前执行的jar文件名
- 15. T4获取当前解决方案的执行文件名
- 16. 如何获取当前执行的模板文件名?
- 17. 获取在PHP中执行当前函数的代码行和文件?
- 18. 从程序集vs进程获取当前可执行文件的名称?
- 19. 在Go中获取当前进程(可执行文件)的名称?
- 20. 如何在Python中执行函数之前执行预检查?
- 21. 当DOM可见时执行jQuery函数
- 22. C - 运行一个可执行文件并检索输出
- 23. 获取当前脚本执行文件名在JavaScript
- 24. J2V8可以执行匿名函数吗?
- 25. 如何检索与machine.config合并的.NET可执行文件app.config
- 26. 执行前检查条件
- 27. 检索当前正在运行的测试用例的名称
- 28. rpmbuild和签名的可执行文件
- 29. git可执行文件的别名
- 30. 如何在powershell函数中获取当前正在执行的文件
你可以从argv得到它[0] – BlackBear 2012-04-28 15:48:51
不是你想要的argv [0],出于某种原因? – thb 2012-04-28 15:54:16