微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个可执行文件能发现自己的path吗 Linux

可能重复:

如何在C中find可执行文件的位置

我想要一个可执行文件能够发现自己的path; 我有一个感觉,答案是“你不能这样做”,但我希望这个被证实!

我不认为我可以使用getcwd() ,因为我可能不会从同一个目录执行它。 我不认为我可以使用argv[0] ,因为它是基于用来执行它的string。 还有其他的select吗?

合理

如何停止在ItemControl中扩展到父级高度的WPF控件(使用扩展器)高度

如何以编程方式获取特定地址的页面大小?

如何将parameter passing给DLL初始化(例如,当通过LoadLibrary加载)?

什么会导致进程停止重新创build?

加载OpenGL函数的上下文或线程特定? (视窗)

真正的问题是我想放置一个文件系统的某个地方的可执行文件,并放置一个认的configuration文件。 我希望可执行文件能够在运行时读取其configuration文件,但我不想将此位置硬编码为可执行文件,也不希望用户必须设置环境variables。 如果这个情况有更好的解决办法,我全都听

使用mingw和g ++编译器

奇怪的CMD错误,只有当我的程序打开CMD

ctypes:使用lib.so(在Mac上)时指针地址修改,而不是在使用lib.dll时(在Windows上)

打开“Internet属性”并等待用户closures它C#

文件描述符和文件句柄(和C)

文件/ proc / self / exe是与当前正在运行的可执行文件的simlink。

您可以使用getpid()来查找当前进程的pid,然后读取/proc/<pid>/cmdline (对于读者)或/proc/<pid>/exe ,这是实际程序的符号链接。 然后,使用readlink(),你可以找到程序的完整路径。

这里是C:

#include <sys/types.h> #include <unistd.h> #include <sys/stat.h> #include <limits.h> #include <stdio.h> int main() { char path[PATH_MAX]; char dest[PATH_MAX]; memset(dest,sizeof(dest)); // readlink does not null terminate! struct stat info; pid_t pid = getpid(); sprintf(path,"/proc/%d/exe",pid); if (readlink(path,dest,PATH_MAX) == -1) perror("readlink"); else { printf("%sn",dest); } return 0; }

如果你想尝试,你可以编译这个,从可执行文件到另一个路径的符号链接,并调用链接

$ gcc -o mybin source.c $ ln -s ./mybin /tmp/otherplace $ /tmp/otherplace /home/fser/mybin

使用proc文件系统

你的流量将是:

获取可执行文件的pid

在/proc/PID/exe查看符号链接

那么,你必须使用getcwd()与argv[0]结合使用。 第一个给你的工作目录,第二个给你从工作目录(或绝对路径)二进制的相对位置。

从argv[0]得到你的名字,然后调用which命令。 如果您的可执行文件在$PATH这将obv只工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐